我找到了几种定义 PE 位数的方法。
IMAGE_FILE_HEADER
包含/ A(你如何选择在这样的地方文章类型?)字段Characteristics
,可以用于进行检查IMAGE_FILE_32BIT_MACHINE
。IMAGE_OPTIONAL_HEADER
包含Magic
在IMAGE_NT_OPTIONAL_HDR32_MAGIC
、IMAGE_NT_OPTIONAL_HDR64_MAGIC
和之间切换的字段IMAGE_ROM_OPTIONAL_HDR_MAGIC
。IMAGE_FILE_HEADER
还包含可以检查的 Machine 字段- 0x8664 - x64
- 0xaa64 - 64 位模式下的 ARMv8
- 0x0200 - 英特尔安腾处理器家族
0x0284 - 64 位 Alpha AXP。
同样SizeOfOptionalHeader
在IMAGE_FILE_HEADER
可检查两个特定值之一。
所有这些都具有相同的含义吗?有什么区别,具体情况,特殊情况?
我发现Machine
字段检查是间接方式,因为该字段旨在定义处理器架构。因此,它作为启发式方法是间接且不可靠的。
SizeOfOptionalHeader
即使对于相同的位数也会有所不同,因为某些图像目录可能不存在。