C++ 64位windows-我是否需要使用图像\u NT\u头64?

C++ 64位windows-我是否需要使用图像\u NT\u头64?,c++,windows,visual-studio,64-bit,32bit-64bit,C++,Windows,Visual Studio,64 Bit,32bit 64bit,我试图在Windows64环境中读取一些进程的PE头,由于我的代码仅通过读取32位和64位可执行文件的IMAGE\u NT\u头结构来工作,我想知道:我是否需要编写类似这样的代码 if executable is 64 bit use IMAGE_NT_HEADERS64 else use IMAGE_NT_HEADERS ??我的代码似乎只使用64位和32位进程的IMAGE\u NT\u头就可以工作,我是否遗漏了什么?显然,区别在于OptionalHeader的某些字段。例如,64位版本

我试图在Windows64环境中读取一些进程的PE头,由于我的代码仅通过读取32位和64位可执行文件的IMAGE\u NT\u头结构来工作,我想知道:我是否需要编写类似这样的代码

if executable is 64 bit
 use IMAGE_NT_HEADERS64
else
 use IMAGE_NT_HEADERS

??我的代码似乎只使用64位和32位进程的IMAGE\u NT\u头就可以工作,我是否遗漏了什么?

显然,区别在于OptionalHeader的某些字段。例如,64位版本的ImageBase是64位大小。如果您的代码在
ImageBase
(包括)之后没有使用任何字段,则您的代码将通过测试。

IMAGE\n\u HEADERS
已经是一个宏,它将自动在
IMAGE\n\u HEADERS 32
IMAGE\n\u HEADERS 64
之间进行选择。但是,基本上,这些结构之间的唯一区别是指针的大小。在两种平台上都有一些属性与32位内存地址相混淆,这些属性被指定为
DWORD
(即使它们实际上应该是指针),以保持这种一致性。