次のアセンブリ コードがアンチデバッグ ツールであるのはなぜですか?
l1:
call l3
l2:
;some code
l3:
mov al, 0c3h
mov edi, offset l3
or ecx, -1
rep stosb
私はC3hがであることを知っており、 がオフセットに従ってオペコードとして値RETN
を書き込むことを知っています。stobs
al
edi
ecx
rep
また、Intel アーキテクチャで元の形式としてプリフェッチされた場合に実行されるstobs
という事実も認識しています。stosw
プログラムをデバッグモードで実行すると、プリフェッチは無関係で、l2 ラベルが実行されます (シングルステップであるため)。それ以外の場合、デバッガーがない場合、l1 と l3 の間でピンポンになります。