为什么对TerminateProcess断点不起作用

本文通过windbg调试notepad程序,探讨了为何在用户态设置的TerminateProcess断点未生效。文章揭示了进程正常退出通常使用ExitProcess,而TerminateProcess用于强制终止,且在某些情况下可能导致DLL状态破坏。作者发现,虽然ExitProcess的调用栈中出现TerminateProcess,但实际上是两个函数的代码共享导致的误解。通过调试,确认了程序退出并未调用TerminateProcess,而是遵循了MSDN的描述,进一步证实了ExitProcess的正确使用。
摘要由CSDN通过智能技术生成

最初发表在QQ空间,全文见 为什么对TerminateProcess断点不起作用

在内核态下巧设用户模块断点介绍了在内核态下设置用户模块的断点,结尾处留了一个问号,为了简化问题,这次直接在用户态下调试。使用windbg 打开一个notepad程序。设置断点。

0:000> bl
0 e 77e616b8     0001 (0001)  0:**** kernel32!TerminateProcess
0:000> g

关闭notepad,正如在内核态下巧设用户模块断点描述的,期望的断点没有起到作用,windbg显示如下信息。
eax=00000000 ebx=00000000 ecx=ffffffff edx=00000000 esi=77f7663e edi=00000000
eip=7ffe0304 esp=0006fdf8 ebp=0006fef0 iopl=0         nv up ei pl nz na pe nc
cs=001b  ss=0023  ds=0023  es=0023  fs=0038  gs=0000             efl=00000202
SharedUserData!SystemCallStub+0x4:
7ffe0304 c3               ret

正常的解释会是这样,TerminateProcess不会使用在进程的正常退出过程中。看看MSDN的解释。

The TerminateProcess function is used to unconditionally cause a process to exit. The state of global data maintained by dynamic-link libraries (DLLs) may be compromised if TerminateProcess is used rather than ExitProcess.

TerminateProcess initiates termination and returns immediately. This stops execution of all threads within the process and requests cancellation of all pending I/O. The terminated process cannot exit until all pending I/O has been completed or canceled.

A process cannot prevent itself from being terminated.

也就是说进程的正常退出一般使用ExitProcess。如果我没有做下面的动作的话,这个解释应该足够了。可惜人生总是充满意外,
0:000> kv
ChildEBP RetAddr  Args to Child             
0006fdf4 77f7664a 77e798ec ffffffff 00000000 SharedUserData!SystemCallStub+0x4 (FPO: [0,0,0])
0006fdf8 77e798ec ffffffff 00000000 77e7ad86 ntdll!NtTerminateProcess+0xc (FPO: [2,0,0])
0006fef0 77e7990f 00000000 77e8f3b0 ffffffff kernel32!_ExitProcess+0x57 (FPO: [Non-Fpo])
0006ff04 77c379c8 00000000 77c37ad9 00000000 kernel32!Termina

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值