Is DebuggarrPresent公式出所


前のブログで簡単にコードを保護します.http://blog.csdn.net/lixiangminghate/article/details/43153263 ダイナミックモニタリングプロセスがデバッグされているかどうかについて言及しました.ここではWinアプリIs Debuggaer Presentを使用しました.残念ながら、いくつかのシステムはこの関数をエクスポートしていません.だから、そのブログでは、このAPIの実現をコンパイルでシミュレートしました.
        今日はreactot 033異常処理関連のソースコードを見ました.異常処理の開始部分で、無意識のうちにreactos監視プロセスのデバッグ状態の実現を見ました.コードは下記の通りです.
[ntoskrnl\include\internal\i 386\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
        この部分のコードがある以上、wrkは理由がなく、検索した結果、ファイルの「basetor\ke\i 386\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
見ましたか?ネットではなくて、勝手にごまかしています.このような検査方法があります.ほぼ公式声明ですので、安心して使ってください.