2016-02-26 49 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++

編譯