PE文件中签名地址移位的解释

Explanation of the signature address shift in PE file

本文关键字:解释 地址 文件 PE      更新时间:2023-10-16

我发现要检查"PE"字符串到文件中,我不能只是用我想要读取的文件中的数据填充IMAGE_NT_HEADERS结构体,但我必须以这种方式移动字节:

ntHeader = (IMAGE_NT_HEADERS *) (dosHeader->e_lfanew + (DWORD) dosHeader);

还有(DWORD)强制转换,它不是很清楚,因为编译器不会抛出错误(显然,在检查PE格式时它不起作用)。我已经检查了到处[也在stackoverflow:)]和这一行总是出现,但我找不到我的问题的答案。

谢谢你的时间。再见!

NT头位于e_lfaNew给出的距离文件顶部的偏移量(以字节为单位)。由于DOS头是.exe文件中的第一个内容,因此查找NT头的一种方法是这样的(尽管风格很难看):

ntHeader = (IMAGE_NT_HEADERS *) (((uint8_t *)dosHeader) + dosHeader->e_lfaNew);

这将DOS头指针视为基字节指针,并在其上添加所需的字节偏移量。