在調試Windows進程時,儘可能早地中斷有時會很方便。我可以在ntdll.dll!_LdrpInitializeProcess中設置斷點嗎?
Inital調用棧看起來是這樣的:(當你在一個DllMain
功能上DLL_PROCESS_ATTACH
設置一個斷點,你得到這個EG)
...
[email protected]() + 0x14 bytes
[email protected]() + 0x205 bytes
> [email protected]() - 0x96d bytes
[email protected]() + 0x6269 bytes
[email protected]() + 0x7 bytes
所以設置一個斷點在這些NTDLL例程應該真正打破的過程中非常早。
但是,我不知道如何在啓動調試器中的過程之前設置斷點。在Visual Studio(2005)中可能嗎?怎麼樣?它可以在WinDbg中完成嗎?
當你重新啓動時,它們甚至不會改變。他們爲什麼?當您安裝修改DLL的系統更新時,它們可能會發生更改,但每次都會在這些DLL的首選基址中加載這些DLL。 – 2011-06-17 20:32:52
@David:[ASLR]怎麼樣(http://en.wikipedia.org/wiki/Address_space_layout_randomization)? – 2011-06-18 11:57:35
你在你的應用程序中啓用ASLR嗎? – 2011-06-18 12:12:36