C++ PE文件中签名地址移位的说明

C++ PE文件中签名地址移位的说明,c++,C++,我发现,要在文件中检查“PE”字符串,我不能用我要读取的文件中的数据填充IMAGE\n NT\u HEADERS结构,但我必须以这种方式移动字节: ntHeader = (IMAGE_NT_HEADERS *) (dosHeader->e_lfanew + (DWORD) dosHeader); 还有(DWORD)转换不是很清楚,因为编译器不会抛出错误 (在检查PE格式时,它显然不起作用)。 我检查了所有地方[也在stackoverflow:)],这一行总是出现,但我找不到问题的答案 谢

我发现,要在文件中检查“PE”字符串,我不能用我要读取的文件中的数据填充IMAGE\n NT\u HEADERS结构,但我必须以这种方式移动字节:

ntHeader = (IMAGE_NT_HEADERS *) (dosHeader->e_lfanew + (DWORD) dosHeader);
还有(DWORD)转换不是很清楚,因为编译器不会抛出错误 (在检查PE格式时,它显然不起作用)。 我检查了所有地方[也在stackoverflow:)],这一行总是出现,但我找不到问题的答案

谢谢你抽出时间。
再见

NT头位于距离文件顶部
e\u lfaNew
(以字节为单位)的偏移量处。由于DOS头是.exe文件中的第一个文件,查找NT头的一种方法是这样的(尽管风格很难看):


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

您犯的错误与
ntHeader = (IMAGE_NT_HEADERS *) (((uint8_t *)dosHeader) + dosHeader->e_lfaNew);