我发现要检查文件中的“PE”字符串我不能只用我想要读取的文件中的数据填充IMAGE_NT_HEADERS结构,但我必须以这种方式移动字节:< / p>
ntHeader = (IMAGE_NT_HEADERS *) (dosHeader->e_lfanew + (DWORD) dosHeader);
还有(DWORD)强制转换不太清楚,因为编译器不会抛出错误 (显然它在检查PE格式时不起作用)。 我已经到处检查[也在stackoverflow :)]这行总是出现,但我找不到我的问题的答案。
感谢您的时间。 再见!
答案 0 :(得分:0)
NT标头位于文件顶部e_lfaNew
(以字节为单位)给出的偏移量处。由于DOS头是.exe文件中的第一个东西,找到NT头的一种方法是这样的(尽管风格丑陋):
ntHeader = (IMAGE_NT_HEADERS *) (((uint8_t *)dosHeader) + dosHeader->e_lfaNew);
这将DOS标头指针视为基本字节指针,并将所需的字节偏移量添加到其中。