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]
今日は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
見ましたか?ネットではなくて、勝手にごまかしています.このような検査方法があります.ほぼ公式声明ですので、安心して使ってください.