2012-09-13 46 views
2

在十六進制編輯器中查看PE文件時,我經常會在節表和第一節之間遇到一些字節,這對我來說並不合適。就我而言,爲了適應對齊,應該有一個00字節的填充。然而,這裏是演示了相反的截圖:PE文件格式 - 節表和第一節之間是什麼?

http://img163.imageshack.us/img163/2390/pequestion.png

由於原來的高亮顯示的塊是相當多的綁定導入表。但我仍然感到困惑。爲什麼這張表不在一節中?這總是如此,還是隻是某個編譯器/鏈接器的規範?我沒有找到關於這個特定問題的任何文件。一切都可以找到關於此主題基本上說:

  1. DOS MZ頭
  2. DOS存根
  3. PE頭
  4. 節表
  5. 第1
  6. 第2
  7. 第3

... a等等

在我遇到這個問題之前,我甚至都沒有意識到這樣的事實,即除了上面列出的那些部分之外,還可能存在事物。

[編輯]

概念證明(因爲莫克斯不相信我):

LordPE

+0

你怎麼能說突出顯示的塊是綁定導入表的一部分?您使用哪個(其他)着名的PE工具來確認此斷言? – mox

+0

@mox嗯,這很容易。 DataDirectory數組從偏移量0x178開始,並在偏移量0x1EF(包括兩端)結束。此數組的第12個元素位於0x1D0,幷包含到Bound Import Table的RVA。如果你看看截圖,你可以很容易地看到位置指向0x2E8,這是高亮部分的一部分。我也嘗試用00s填充選擇,這會「銷燬」二進制文件(無法再啓動)。將RVA和BIT的大小設置爲0會導致二進制再次啓動,這只是另一個指示。不過,我還用LordPE加倍檢查。 – user1658887

回答

3

諸如IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT之類的數據目錄可以存在於部分之外。存在於任何已知部分之外的數據目錄的另一個例子是IMAGE_DIRECTORY_ENTRY_CERTIFICATE數據目錄,它是用於在可執行文件簽名時存儲證書信息的數據目錄。

數據目錄可以指向段之外的數據,在一個段中,或者它們可以指向整個段。數據目錄IMAGE_DIRECTORY_ENTRY_RESOURCE指向整個「.rsrc」部分。某些數據目錄指向已知部分,這些記錄在PE format specification by Microsoft中。

0

至於我可以看到LordPe,IEXPLORE.EXE的IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT進入是空的。 IEXPLORE.EXE中

enter image description here

+0

也許你有不同的版本(你是否嘗試過64位版本?)。但我可以向你保證我的發現是正確的 – user1658887

0

32位和64位版本沒有IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT條目。

這裏LordPE的snaphot,顯示(綠色)失蹤IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT進入Windows 7的計算機上,IEXPLORE.EXE 64位版本:

enter image description here

它看起來像你不看在正確的目錄條目處。

+1

我從未更新過我的IE。所以我相信這與不同的版本有關。我正在看正確的條目,只要相信我:)。我發現,這是Microsoft Binaries中有時會發生的情況,因爲緊接在節表之後的那些字節只是未使用的字節,有時用於存儲綁定導入表。但它仍然沒有文檔。 – user1658887

+0

我很高興看看你的形象。你能提供(發送?)嗎? – mox

+0

我用截圖更新了原始文章。 – user1658887

1

類似綁定導入表的項目可以在鏈接器想要將它們放入原始圖像的任何地方寫入。它只是用表格覆蓋零字節,並使數據目錄中的指針正確。你甚至可以用導入表覆蓋DOS頭或存根的中間部分,只要目錄中的指針正確,它就會工作。

相關問題