IsDebuggerPresent官方出处

        在前面我的博文一步一步简单的保护我们的代码中 http://blog.csdn.net/lixiangminghate/article/details/43153263 提到了动态监测进程是否被调试。此间用到了Win Api IsDebuggerPresent。很可惜,某些系统没有导出该函数,因此,在那篇博文中用汇编模拟了这个API的实现。

        今天看reactos033异常处理相关的源码,在异常处理开始部分,无意中看到了reactos监测进程调试状态的实现,代码如下:

[ntoskrnl\include\internal\i386\asmmarco.S]

    mov ecx, fs:[KPCR_CURRENT_THREAD]
    cld

    /* Flush DR7 */
    and dword ptr [ebp+KTRAP_FRAME_DR7], 0

    /* Check if the thread was being debugged */
    test byte ptr [ecx+KTHREAD_DEBUG_ACTIVE], 0xFF
    jnz Dr_&Label

        既然reactos有这部分代码,wrk没理由没有,经过搜索,在文件[base\ntos\ke\i386\kimarco.inc]中找到如下代码:
ifdef PcPrcbData
        mov     ecx,PCR[PcPrcbData+PbCurrentThread] ; get current thread address
else
        mov     ecx,PCR[PcPrcb]
        mov     ecx,[ecx].PbCurrentThread ; get current thread address
endif
        cld

        and     dword ptr [ebp].TsDr7, 0
        test    byte ptr [ecx].ThDebugActive, 0ffh ; See if debug registers need saving

        jnz     Dr_&AssistLabel

看到没,不是网上随便忽悠的,确有这样的检测方法。差不多是官方声明的,放心用吧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值