ふと思いで、新しい壁紙を探してみる。普段は黒系のシリーズを使っているが、一部にカラフルな要素を取り入れて、デスクトップにアイコンを配置したい。他の色合いの壁紙だとアイコンが見えづらい。
アセンブリコードをしばらく見つめて考えてみたが、理解できなかった。AI
に頼ってみると、命令は説明されたものの、状況の説明はない。特定の状況下でのみ使用される命令であることは確かで、通常のコードではこのような書き方はしない。
現今は検索エンジンの方が良いでしょう、アセンブリの知識が足りません。
壁紙
アセンブリコード
PUSHFD
MOV DWORD PTR [ESP],0X100
POPFD
実用的な応用シーン
bool IsDebugged()
{
__try
{
__asm
{
pushfd
mov dword ptr [esp], 0x100
popfd
nop
}
return true;
}
__except(GetExceptionCode() == EXCEPTION_SINGLE_STEP
? EXCEPTION_EXECUTE_HANDLER
: EXCEPTION_CONTINUE_EXECUTION)
{
return false;
}
}
説明
斜体_3強調_2__斜体_4__、コードをトレースするとこのフラグがデバッガによってクリアされるため、この例外が見えなくなります。
実際のテストでは、検出デバッグの関数をステップオーバーするとデバッグが検知されないことがわかった。デバッグ関数実行時にステップインした場合のみ検知される。(資料調査、未検証)
参照資料
関連資料は、ウェブサイトの英語版を翻訳したもので、様々なデバッグ対策技術について解説しています。