首页 > 代码库 > 如何判断exe或dll的目标平台及是否是.NET?

如何判断exe或dll的目标平台及是否是.NET?

1.

COFF文件头中偏移0处的Machine指示目标机器类型(IMAGE_FILE_MACHINE_AMD64等),偏移18处的Characteristics位指示文件属性(IMAGE_FILE_32BIT_MACHINE0x0100,IMAGE_FILE_LARGE_ADDRESS_AWARE0x0020)。

但我们判断dll或exe支持的目标平台并不使用COFF头,而使用可选文件头(PE32,PE32+即位于此处),因为可选文件头用于为加载器提供信息

可选文件头分为3个部分:标准域,windows特定域和数据目录。PE32/PE32+,由位于标准域处的首个标识幻数(Magic),长度为2,它的可能值和含义为:

  • 0x10b  PE32可执行文件
  • 0x107 一个ROM镜像
  • 0x20b PE32+可执行文件

位于可选文件头标准域的magic标志位的值,也确定了标准域和特定域的大小。

  • 标准域:PE32 28,PE32+24;(PE32比PE32+多了一个BaseOfData)
  • 特定域:PE32 68,PE32+ 88。
  • 数据目录:可变,可选文件头的总大小由COFF文件头中的SizeofOptionalHader指定。

2.

 

如何判断exe或dll的目标平台及是否是.NET?