2013-05-10 19 views
0

我想查找exe文件使用的內存地址。我有exe文件,我想要一個它使用的地址列表。如何查找程序使用的地址?

這必須靜態完成並且不運行可執行文件本身。 有人可以幫我嗎?

此外,如果你知道一個動態的方式來做到這一點,請告訴我。

+1

這並不是一般的工作 - 它可能會做一些古怪的事情,然後用它作爲地址(例如計算一個散列的前映像),或者它可以做一些可能會或可能不會暫停然後使用一些隨機地址。查看暫停問題。 – harold 2013-05-10 09:13:02

+0

我只想知道一個程序使用了什麼地址,然後在其他地方使用這個地址。這是我教授的一個項目。 – 2013-07-19 05:58:38

回答

1

你必須看看exe頭。有一個加載程序在運行可執行文件時必須適應的地址列表。這被稱爲重定位表。當你通過像IDA這樣的反彙編程序來查看exe文件時,你可以假設一個加載地址或exe文件可以指定它。

通常地址是相對的,所以即使你找到一次地址,也不能保證它總是在同一個地方。如果程序是用位置獨立代碼編寫或編譯的,那麼它不依賴任何絕對地址。

只是爲了反彙編你可以看看像IDA或類似的工具。

+0

謝謝你的回答。你的意思是程序使用的所有地址都在重定位表中?但是如果程序使用絕對地址而不是相對的呢? – 2013-07-19 05:56:36

+0

重定位表只包含必須重新定位的地址。如果程序使用絕對地址,我不認爲有條目,因爲不需要它。雖然有一個指定基地址的條目,但是當然如果程序訪問其他地址,比如設備等,我不認爲會有任何地方找到條目。 – Devolus 2013-07-19 06:57:38

+0

那麼怎樣才能找出程序一般使用哪些地址? – 2013-07-19 13:02:40