2012-01-03 53 views
8

我正在學習關於Windows和DLL的東西,我有一些關於它的問題。 :)DLL是否總是有相同的基地址?

我做了一個簡單的程序,加載我自己的DLL。這個DLL只有簡單的功能,加上減號。

這是一個問題:如果我加載一些DLL(例如,text.dll),這個DLL總是有相同的基地址?或者當我重新啓動時它會改變?並且我可以保存DLL的基地址?

當我測試它時,它總是有相同的基地址,但我認爲當我需要這樣做時,我必須對DLL基地址做一些例外。

回答

11

操作系統將加載您的DLL在任何基地址它喜歡。你可以指定一個「首選」的基地址,但是如果這個地址不可用(無論出於何種原因,這可能完全超出了你的控制範圍),你的DLL將被操作系統重定位到任何操作地址系統認爲合適。

+1

ASLR將主動嘗試將DLL放在不同的位置。 – 2012-01-03 17:48:12

+0

謝謝你回答我的問題:) – Nagi 2012-01-03 17:49:18

+0

當然,沒問題Nagi。不要忘記「接受」。 – 2012-01-03 17:50:24

5

我加載一些DLL(例如text.dll),這個DLL總是有相同的基地址嗎?

不是。它是優選的基地址。如果某個東西已經加載到該地址,加載器將重新綁定它並修復所有地址。

其他東西,如Address Space Layout Randomization可能會導致它在每次過程開始時都會有所不同。

+0

+1 - 無法保證固定地址,但您可以通過http://blogs.msdn.com/b/winsdk/archive/2009/11/30/how-to-disable-address -space-layout-randomization-aslr.aspx – 2012-01-03 17:50:34

+0

謝謝:)我明白了。 – Nagi 2012-01-03 17:50:52

相關問題