「クラッシュ」をテストするには、オペレーティング システムがイベント ログに DEP 違反を記録する方法を確認するために、小さな Delphi コードが必要です。
DEP のアクティブ化に関する多くの情報源を見つけましたが、DEP 違反を「トリガー」する方法については知りませんでした。
例はありますか?
DEP vialotion がログでどのように表示されるかを示します
「クラッシュ」をテストするには、オペレーティング システムがイベント ログに DEP 違反を記録する方法を確認するために、小さな Delphi コードが必要です。
DEP のアクティブ化に関する多くの情報源を見つけましたが、DEP 違反を「トリガー」する方法については知りませんでした。
例はありますか?
DEP vialotion がログでどのように表示されるかを示します
このコードは仕事を成し遂げます:
procedure DoJump(Address: Pointer);
asm
JMP Address
end;
const
X: Byte=$C3;//RET op code
procedure TriggerDEP;
begin
DoJump(@X);
end;
生成された実行可能ファイルでは、 が格納されている場所がX
データとして扱われます。別の方法として、スタックにあるコードを実行してみることができます。
procedure DoJump(Address: Pointer);
asm
JMP Address
end;
procedure TriggerDEP;
var
X: Byte;
begin
X := $C3;
DoJump(@X);
end;
これらは両方とも、DEP がアクティブな場合にアクセス違反の例外を発生させます。
DEP がアクティブであることを確認する必要がある場合 (たとえば、オプションの 32 ビット プロセスから)、次の関数を呼び出します。
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;