2010-10-21 38 views
1

嘿, 今天我試着做NDIS.sys的二進制比較,我注意到一些奇怪的東西。 我採取了一項功能,並開始分析。前30個字節在磁盤(使用IDA)和內存(使用WinDbg)上是相同的。然後,事情發生了變化。我看到類似「jmp _ imp _XXXXX」。 JMP字節相同,但地址不同。什麼導致磁盤上的驅動程序與映射到內存的驅動程序之間的差異?

我的問題是 - 有什麼不同?我認爲這與搬遷有關。儘管跳轉是在同一個模塊中尋址,但它是一個長跳轉,這使得它相對於模塊基地址。如果發生重定位,它也需要重定位這個地址,儘管它在同一個模塊上。

我是對的還是完全錯的? :-) 謝謝。

回答

2

是的,當模塊沒有加載到內存中的首選基地址時,跳轉目標會在重定位期間被重寫。實際上,建議開發人員爲他們的模塊提供一個非默認的基地址以避免重定位成本,但許多人從來不這樣做,所以一些模塊總是會重新定位,並且加載器必須重寫跳轉目標。

+0

請注意,對於設備驅動程序的首選基地址是完全忽略 – snoone 2010-10-22 14:41:24

+0

是的,但 - 爲什麼需要跳轉的跳轉?跳轉目標位於同一個模塊中。 – MindBlower 2010-10-22 19:20:33

+0

您可以顯示您在調試器中看到的內容嗎? – snoone 2010-10-25 17:59:39

相關問題