7
對於測試「崩潰」,我需要一小段Delphi代碼來查看操作系統在事件日誌中記錄DEP違規的方式。Delphi的簡單數據執行保護示例代碼
我發現了許多關於激活DEP的來源,但沒有介紹如何'觸發'DEP違規。
你有沒有例子?
顯示了DEP vialotion應該怎麼看起來像日誌
對於測試「崩潰」,我需要一小段Delphi代碼來查看操作系統在事件日誌中記錄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;