资源简介
本资源为linux-0.11的源码文件。对全部的代码文件进行了详细的注释和说明。可以配合我的资源中《linux内核完全注释(赵炯著)》一书进行详细的阅读,对于想快速理解linux内核的同学十分有用。
注意:资源为中文注释的源码文件,注释十分详细。配合source insight阅读更佳。
代码片段和文件信息
#include
#include
#include
DWORD g_dwFileHeader[1024] = {0}; //The PE file‘s header will be read into this buffer.
typedef struct __tagFILE_HEADER{
unsigned char ucNop[4];
DWORD dwJmpAddr;
}__FILL_HEADER;
__FILL_HEADER g_FillHeader = {0x900x900x900xe90x00000000}; //This structure will be
//written to target file.
char* g_lpszTargetPath = “E:\\book\\Temp\\linux011VC\\VC\\Release\\system“; //Target file’s path and name.
void main(int argcchar argv[])
{
IMAGE_DOS_HEADER* ImageDosHeader = NULL;
IMAGE_NT_HEADERS* ImageNtHeader = NULL;
IMAGE_OPTIONAL_HEADER* ImageOptionalHeader = NULL;
HANDLE hFile = INVALID_HANDLE_VALUE;
DWORD dwReadBytes = 0L;
BOOL bResult = FALSE;
DWORD dwActualBytes = 0L;
DWORD dwOffset = 0L;
UCHAR* lpucSource = NULL;
UCHAR* lpucDes = NULL;
DWORD dwLoop = 0;
hFile = CreateFile( //Open the target file.
g_lpszTargetPath
GENERIC_READ | GENERIC_WRITE
0L
NULL
OPEN_ALWAYS
0L
NULL);
if(INVALID_HANDLE_VALUE == hFile)
{
printf(“Can not open the target file to read.“);
goto __TERMINAL;
}
dwReadBytes = 4096; //Read 4k bytes from target file.
bResult = ReadFile(hFileg_dwFileHeaderdwReadBytes&dwActualBytesNULL);
if(!bResult)
goto __TERMINAL;
CloseHandle(hFile);
hFile = INVALID_HANDLE_VALUE;
//
//The following code locates the entry point of the PE fileand modifies it.
//
ImageDosHeader = (IMAGE_DOS_HEADER*)&g_dwFileHeader[0];
dwOffset = ImageDosHeader->e_lfanew;
ImageNtHeader = (IMAGE_NT_HEADERS*)((UCHAR*)&g_dwFileHeader[0] + dwOffset);
ImageOptionalHeader = &(ImageNtHeader->OptionalHeader);
g_FillHeader.dwJmpAddr = ImageOptionalHeader->AddressOfEntryPoint;
printf(“ Entry Point : %d\r\n“ImageOptionalHeader->AddressOfEntryPoint);
g_FillHeader.dwJmpAddr -= sizeof(__FILL_HEADER); //Calculate the target address will
//jump to.
//Because we have added some nop instruc-
//tions in front of the target fileso
//we must adjust it.
lpucSource = (UCHAR*)&g_FillHeader.ucNop[0];
lpucDes = (UCHAR*)&g_dwFileHeader[0];
for(dwLoop = 0;dwLoop < sizeof(__FILL_HEADER);dwLoop ++) //Modify the target file‘s header.
{
*lpucDes = *lpucSource;
lpucDes ++;
lpucSource ++;
}
hFile = CreateFile( //Open the target file to write.
g_lpszTargetPath
GENERIC_READ | GENERIC_WRITE
0L
NULL
OPEN_ALWAYS
0L
NULL);
if(INVALID_HANDLE_VALUE == hFile)
{
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 11305 2002-01-03 06:13 linux0.11\boot\bootsect.s
文件 11436 2002-01-03 00:16 linux0.11\boot\head.s
文件 11437 2002-01-03 04:19 linux0.11\boot\head.s.bak
文件 10385 2002-01-03 01:04 linux0.11\boot\setup.s
文件 3401 2002-01-03 11:47 linux0.11\build\build.cpp
文件 10740 2002-01-03 02:51 linux0.11\fs\bitmap.c
文件 10735 2002-01-03 00:13 linux0.11\fs\bitmap.c.bak
文件 4158 2002-01-03 03:18 linux0.11\fs\block_dev.c
文件 15156 2005-04-27 14:25 linux0.11\fs\buffer.c
文件 15064 2002-01-04 03:11 linux0.11\fs\buffer.c.bak
文件 3959 2002-01-03 03:18 linux0.11\fs\char_dev.c
文件 16869 2002-01-03 01:28 linux0.11\fs\exec.c
文件 3352 2005-04-25 15:24 linux0.11\fs\fcntl.c
文件 4696 2005-04-25 15:26 linux0.11\fs\file_dev.c
文件 247 2002-01-03 03:25 linux0.11\fs\file_table.c
文件 14706 2002-01-03 09:48 linux0.11\fs\inode.c
文件 1980 2005-04-25 15:27 linux0.11\fs\ioctl.c
文件 5053 1991-12-02 11:21 linux0.11\fs\Makefile
文件 35524 2002-01-03 09:46 linux0.11\fs\namei.c
文件 34622 2002-01-03 07:36 linux0.11\fs\namei.c.bak
文件 9556 2002-01-03 09:48 linux0.11\fs\open.c
文件 5220 2005-04-25 15:41 linux0.11\fs\pipe.c
文件 5908 2005-04-25 15:45 linux0.11\fs\read_write.c
文件 2754 2005-04-25 15:47 linux0.11\fs\stat.c
文件 13309 2002-01-03 03:00 linux0.11\fs\super.c
文件 2542 2002-01-03 04:35 linux0.11\fs\truncate.c
文件 8415 2004-09-02 13:14 linux0.11\include\a.out.h
文件 1950 2005-04-27 16:00 linux0.11\include\asm\io.h
文件 980 2002-01-03 00:56 linux0.11\include\asm\memory.h
文件 1253 2002-01-03 01:17 linux0.11\include\asm\memory.h.bak
............此处省略156个文件信息
- 上一篇:小波变换聚类
- 下一篇:谷歌浏览器翻译插件.zip
相关资源
- 剖析Linux系统下基于NUMA构建的服务
- linux SPI设备注册和驱动小结
- 周立功PCI CAN卡LINUX驱动ubuntu16.04内核
- 实现Windows与Linux两系统间自由切换
- 在双引导Linux系统上实现OS自动切换
- 如何删除Linux系统后找回Windows的启动
- Linux命令详解,循序渐进Linux
- Linux系统文件命令精通指南(下)
- Linux系统命令及Shell脚本实践指南
- RK3308 LINUX开发者指南(1).pdf
- S3C4510 开发板中uCLinux系统开发
- 嵌入式操作系统的解析
- Linux点阵字库和字库生成器.rar
- Linux-UNIX系统编程手册上、下册中文版
- 基于ARM的电子相册源码含动态库可运
- PSFTP.EXE 工具
- 如何实现Linux与windows文件互传
- Linux内核函数Start_kernel()的功能
- 一只老鸟的嵌入式ARM学习心得
- cximage的linux版本源码
- yaf-2.1.17.tgz
- IBM eServer xSeries 445 EXP400在Linux下的双
- 如何在本地无光驱软驱时通过PXE远程
- Linux操作系统下配置无密码的RSH访问
- 如何利用mdadm在Linux中配置RAID
- db2 v9.5 linux 许可证
- linux telnet服务安装包
- SUSE Linux Enterprise——助力曙光高
- 运行LINUX的中高端HP INTEGRITY服务器
- lsoflist open files命令
评论
共有 条评论