首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >体育科数据

体育科数据
EN

Stack Overflow用户
提问于 2014-05-06 15:15:19
回答 1查看 2.1K关注 0票数 0

我有一个可移植可执行(,.exe )文件,我想检索它的部分。我确实喜欢这样:

代码语言:javascript
复制
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);

或者:

代码语言:javascript
复制
IMAGE_SECTION_HEADER* pSection = (IMAGE_SECTION_HEADER*) ((BYTE *) pNTHeaders + sizeof(IMAGE_NT_HEADERS));

pSection的地址为NULL (0 )。

我必须指出,缓冲区变量是我读取PE数据的地方。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-06 15:41:19

您需要使用SizeOfOptionalHeader值跳过可选的标头。不要依赖它是固定的大小。winnt.h有一个宏,您应该使用:

代码语言:javascript
复制
#define IMAGE_FIRST_SECTION( ntheader ) ((PIMAGE_SECTION_HEADER)  \
    ((ULONG_PTR)(ntheader) +                                      \
     FIELD_OFFSET( IMAGE_NT_HEADERS, OptionalHeader ) +           \
     ((ntheader))->FileHeader.SizeOfOptionalHeader   \
    ))
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23498583

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档