2012-06-21 12 views
7

テスト 'クラッシュ'の場合、オペレーティングシステムがDEP違反をイベントログに記録する方法を確認するには、小さなデルファイコードが必要です。デルファイの簡単なデータ実行防止のサンプルコード

私はDEPを有効にすることについて多くの情報源を見つけましたが、DEP違反を「トリガ」する方法については認識していません。

例がありますか?


関連質問:生成された実行では、

procedure DoJump(Address: Pointer); 
asm 
    JMP Address 
end; 

const 
    X: Byte=$C3;//RET op code 

procedure TriggerDEP; 
begin 
    DoJump(@X); 
end; 

https://serverfault.com/questions/130716/if-dep-has-stopped-an-app-is-there-a-possibility-to-see-this-events-in-a-log

はDEP vialotionログこのコードは、仕事を取得します

答えて

10

でのようになります方法を示しますXが格納されている場所をデータとして扱います。別の方法として、あなたは、スタック上にあるコードを実行してみてください:

procedure DoJump(Address: Pointer); 
asm 
    JMP Address 
end; 

procedure TriggerDEP; 
var 
    X: Byte; 
begin 
    X := $C3; 
    DoJump(@X); 
end; 

DEPが有効になっているときに、これらの両方がアクセス違反の例外を発生させます。

あなたは、それがオプションである32ビットプロセスから、たとえば、DEPが有効であることを確認して、この関数を呼び出す必要がある場合:

procedure EnableDEP; 
const 
    PROCESS_DEP_ENABLE: DWORD=$00000001; 
var 
    SetProcessDEPPolicy: function(dwFlags: DWORD): BOOL; stdcall; 
begin 
    SetProcessDEPPolicy := GetProcAddress(GetModuleHandle(kernel32), 'SetProcessDEPPolicy'); 
    if Assigned(SetProcessDEPPolicy) then begin 
    SetProcessDEPPolicy(PROCESS_DEP_ENABLE); 
    end; 
end; 
関連する問題