【发布时间】:2014-05-06 15:15:19
【问题描述】:
我有一个 Portable Executable ( .exe ) 文件,我想检索它的部分。我确实喜欢这样:
IMAGE_DOS_HEADER* pDOSHeader = (IMAGE_DOS_HEADER*) buffer; // DOS Header
IMAGE_NT_HEADERS* pNTHeaders = (IMAGE_NT_HEADERS*) ((BYTE *) pDOSHeader + pDOSHeader->e_lfanew); // PE Header
到目前为止一切都很好。我发现了这个:
节表:紧跟在 PE 头之后。它是一个 IMAGE_SECTION_HEADER 结构的数组,每个结构都包含有关 PE 文件中一个部分的信息,例如其属性和虚拟偏移量。请记住,节数是 FileHeader 的第二个成员(从 PE 头开始的 6 个字节)。如果 PE 文件中有 8 个节,则表中将有 8 个此结构的重复项。每个头结构都是 40 字节,它们之间没有“填充”。
现在,当我这样做时:
IMAGE_SECTION_HEADER* pSection = (IMAGE_SECTION_HEADER*)
(pNTHeaders->FileHeader.PointerToSymbolTable);
或:
IMAGE_SECTION_HEADER* pSection = (IMAGE_SECTION_HEADER*) ((BYTE *) pNTHeaders + sizeof(IMAGE_NT_HEADERS));
pSection 的地址为 NULL ( 0 )。
我不得不提到 buffer 变量是我读取 PE 数据的地方。
【问题讨论】: