首先,节的话有两部分,一部分是节表,另外一部分就是节区了,节表是用于描述节区信息的,而节区呢,简单点说就是数据块。
在上一篇博客中有提及过如何定位节表,重点就是需要根据选项头的大小来定位,这里的话就直接上一点代码吧,前两篇概念较多
PIMAGE_DOS_HEADER pDosHeader = GetDosHeader(); //获取dos头
if (pDosHeader == NULL)
return NULL;
PIMAGE_FILE_HEADER pFileHeader = GetFileHeader(); //获取文件头
if (pFileHeader == NULL)
return NULL;
//这里为 sizeof Signature + sizeof IMAGE_FILE_HEADER 的大小
DWORD offset = (DWORD)&(((PIMAGE_NT_HEADERS)0)->OptionalHeader);
//首地址 + e_lfanew + offset + SizeOfOptionalHeader
PIMAGE_SECTION_HEADER section = (PIMAGE_SECTION_HEADER)(GetPeAddrBase() + pDosHeader->e_lfanew
+ offset + pFileHeader->SizeOfOptionalHeader);
OK,老规矩下面来探讨一下节表的字段,把PE宏观看成一块一块的数据,那么在创建进程时,操作系统需要将此可执行文件按某种方式搬运过去&#x