加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

windows – 我可以在ntdll.dll中设置断点!_LdrpInitializeProce

发布时间:2020-12-14 05:53:33 所属栏目:Windows 来源:网络整理
导读:在调试 Windows进程时,有时会尽可能早地中断. Inital Callstack看起来像这样:(例如,当您在DLL_PROCESS_ATTACH上的DllMain函数中设置断点时,可以得到此信息) ... ntdll.dll!_LdrpCallInitRoutine@16() + 0x14 bytes ntdll.dll!_LdrpRunInitializeRoutines@4()
在调试 Windows进程时,有时会尽可能早地中断.

Inital Callstack看起来像这样:(例如,当您在DLL_PROCESS_ATTACH上的DllMain函数中设置断点时,可以得到此信息)

...
    ntdll.dll!_LdrpCallInitRoutine@16()  + 0x14 bytes   
    ntdll.dll!_LdrpRunInitializeRoutines@4()  + 0x205 bytes 
>   ntdll.dll!_LdrpInitializeProcess@20()  - 0x96d bytes    
    ntdll.dll!__LdrpInitialize@12()  + 0x6269 bytes 
    ntdll.dll!_KiUserApcDispatcher@20()  + 0x7 bytes

因此,在其中一个ntdll例程中设置断点应该会非常早地打破这个过程.

但是,在调试器中启动进程之前,我无法弄清楚如何在那里设置断点.是否可以在Visual Studio(2005)中使用?怎么样?可以在WinDbg中完成吗?

解决方法

当进程启动时,我会使用像 GFlags这样的东西来启动调试器.

以下是test.exe的示例gflags设置

这是调试器输出.注意调用堆栈与ntdll!LdrpInitializeProcess

CommandLine: “C:temptest.exe”
Symbol search path is:
srv*;srvc:symbols07001
Executable search path is: ModLoad:
0000000000d20000 0000000000d28000
image0000000000d20000 (1b40.464):
Break instruction exception - code
80000003 (first chance)
ntdll!LdrpDoDebuggerBreak+0x30:
00000000
77c7cb60 cc int
3 0:000> k Child-SP RetAddr
Call Site 000000000012ed70
00000000
77c32ef5
ntdll!LdrpDoDebuggerBreak+0x30
000000000012edb0 0000000077c11a17
ntdll!LdrpInitializeProcess+0x1b4f
000000000012f2a0 0000000077bfc32e
ntdll! ?? ::FNODOBFM::string'+0x29220
00000000
0012f310 00000000`00000000
ntdll!LdrInitializeThunk+0xe

或者您可以在调试器中打开像Windbg那样的进程,默认情况下会进入ntdll!LdrpInitializeProcess.

HTH

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读