设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 创业者 手机 数据
当前位置: 首页 > 服务器 > 系统 > 正文

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

发布时间:2021-02-05 00:46 所属栏目:52 来源:网络整理
导读:在调试 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:\temp\test.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

(编辑:ASP站长网)

    网友评论
    推荐文章
      热点阅读