根據我讀過的文檔,Windows可執行文件的導入目錄通常放在名爲.idata
的部分。 (我知道這些名稱實際上只是註釋,但'通常......被稱爲'可能意味着Microsoft工具鏈將默認使用該名稱。)PE .idata部分
當我編譯並鏈接一個簡單的C測試程序與Microsoft編譯器然後dumpbin的結果,沒有一節叫做.idata
。但是,在可選標題中有一個肯定的RVA和導入目錄的大小,所以導入表就在那裏。
現在的導入目錄是放在一個名稱不同的部分,還是我錯過了什麼?
根據我讀過的文檔,Windows可執行文件的導入目錄通常放在名爲.idata
的部分。 (我知道這些名稱實際上只是註釋,但'通常......被稱爲'可能意味着Microsoft工具鏈將默認使用該名稱。)PE .idata部分
當我編譯並鏈接一個簡單的C測試程序與Microsoft編譯器然後dumpbin的結果,沒有一節叫做.idata
。但是,在可選標題中有一個肯定的RVA和導入目錄的大小,所以導入表就在那裏。
現在的導入目錄是放在一個名稱不同的部分,還是我錯過了什麼?
確實,在我剛剛構建的可執行文件中,沒有.idata
部分。
使用PE資源管理器,我們可以看到導入表格和IAT存儲爲.rdata
部分的一部分。 (請注意「指點目錄」欄):
在數據目錄頁,我們看到,導入表的虛擬地址爲0x403354
。這在.rdata
部分(0x403000 - 0x403C00
)的範圍內着陸。
有趣的(和有些令人沮喪),用於IDA PE裝載合成 「創建」 的.idata
部分,其不實際上在文件中存在:
如果您不想要這種行爲,您可以在加載對話框中取消選中「創建導入段」。但是,您可能會得到不同的分析結果,因爲某些代碼依賴於.idata段的特殊屬性,無論它是否是人爲的。 –
謝謝@IgorSkochinsky - 我知道我在某一時刻看到過這樣的選項,但無法立即記住它在哪裏。有了這樣的許多選項,它們會很有幫助 - 直到您忘記IDA在加載時所做的「魔術」,並且想知道與原始二進制文件的差異是什麼。 –
我已成功地放置任何部分之外的導入表。事實上,我的可執行文件的一個版本根本沒有任何部分。 –