2016-02-26 65 views
2

我目前正在编写一个读取和写入PE文件的库。据我所知,从规范中,可选标题通常不用于目标文件。但是,它包含在PE32和PE32 +变体之间指定的字段。 PE是否允许PE32 +目标文件?PE文件可选标题幻数

的说明书中具体表示:

一个目的文件可以具有可选的报头,但通常此头 具有除了增加大小的对象文件中没有功能。

这似乎对我略有含糊。我倾向于将其视为“可选标题在对象文件中被忽略,并且只会扩大文件。”但是,它可以被理解为“可选标题可用于目标文件中,以将大小从32位增加到64位”。这是什么意思?

编辑:根据规范,0x10b的值表示32位,0x20b的值表示64位,值0x107表示ROM图像。 ROM映像是否始终为32位?

回答

1

可选头不一般的目标文件

这是正确的使用

然而,它包含PE32和PE32 +变体之间指定的领域。

正确以及

PE是否允许PE32 +目标文件?

如果您的意思是您可以编译PE32.obj并将其链接到PE32 +应用程序,则由于指针的大小不同而导致错误的操作。

我倾向于将此读为“可选标题在对象文件中被忽略并且只会使文件变大”。

这是正确的,我相信。

可选标头是图像(a.k.a. exe或dll)的必备条件。

您可以通过在您的.obj或.exe文件上执行dumpbin /header来收集所有这些信息。每个VC++安装都分发Dumpbin。例如,小文本项目

dumpbin.exe /headers PE.exe | findstr PE 

会产生

Dump of file PE.exe 
PE signature found 
      20B magiC# (PE32+) 

但obj文件使用dumpbin会产生什么,有没有可选头。

ROM映像是否始终为32位?

我怀疑是这样,但是,坦率地说,不知道,从来没有与ROM映像

PS以上所有规定的工作,我相信,是真正的文件用Visual C++

编译