【问题标题】:64 bit windows - do I need to use IMAGE_NT_HEADERS64?64 位窗口 - 我需要使用 IMAGE_NT_HEADERS64 吗?
【发布时间】:2012-12-17 08:59:27
【问题描述】:

我正在尝试在 windows 64 环境中读取一些进程的 PE 标头,并且由于我的代码仅通过读取 32 位和 64 位可执行文件的 IMAGE_NT_HEADERS 结构就可以工作,我想知道:我是否需要编写类似的东西

if executable is 64 bit
 use IMAGE_NT_HEADERS64
else
 use IMAGE_NT_HEADERS

?我的代码似乎只使用 IMAGE_NT_HEADERS 来处理 64 位和 32 位进程,我错过了什么吗?

【问题讨论】:

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

标签: c++ windows visual-studio 64-bit 32bit-64bit


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-16
    • 2015-05-30
    • 1970-01-01
    • 2012-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多