3

根據我讀過的文檔,Windows可執行文件的導入目錄通常放在名爲.idata的部分。 (我知道這些名稱實際上只是註釋,但'通常......被稱爲'可能意味着Microsoft工具鏈將默認使用該名稱。)PE .idata部分

當我編譯並鏈接一個簡單的C測試程序與Microsoft編譯器然後dumpbin的結果,沒有一節叫做.idata。但是,在可選標題中有一個肯定的RVA和導入目錄的大小,所以導入表就在那裏。

現在的導入目錄是放在一個名稱不同的部分,還是我錯過了什麼?

+1

我已成功地放置任何部分之外的導入表。事實上,我的可執行文件的一個版本根本沒有任何部分。 –

回答

3

確實,在我剛剛構建的可執行文件中,沒有.idata部分。

使用PE資源管理器,我們可以看到導入表格和IAT存儲爲.rdata部分的一部分。 (請注意「指點目錄」欄):

enter image description here

enter image description here

在數據目錄頁,我們看到,導入表的虛擬地址爲0x403354。這在.rdata部分(0x403000 - 0x403C00)的範圍內着陸。


有趣的(和有些令人沮喪),用於IDA PE裝載合成 「創建」 的.idata部分,其不實際上在文件中存在:

enter image description here

+3

如果您不想要這種行爲,您可以在加載對話框中取消選中「創建導入段」。但是,您可能會得到不同的分析結果,因爲某些代碼依賴於.idata段的特殊屬性,無論它是否是人爲的。 –

+0

謝謝@IgorSkochinsky - 我知道我在某一時刻看到過這樣的選項,但無法立即記住它在哪裏。有了這樣的許多選項,它們會很有幫助 - 直到您忘記IDA在加載時所做的「魔術」,並且想知道與原始二進制文件的差異是什麼。 –