PE文件中签名地址转换的说明

时间:2014-03-14 05:52:56

标签: c++

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

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

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

感谢您的时间。 再见!

1 个答案:

答案 0 :(得分:0)

NT标头位于文件顶部e_lfaNew(以字节为单位)给出的偏移量处。由于DOS头是.exe文件中的第一个东西,找到NT头的一种方法是这样的(尽管风格丑陋):

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

这将DOS标头指针视为基本字节指针,并将所需的字节偏移量添加到其中。