在调试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