mjn*_*mjn 7 delphi data-execution-prevention
对于测试'崩溃',我需要一小段Delphi代码来查看操作系统如何在事件日志中记录DEP违规.
我发现了很多关于激活DEP的来源,但没有找到关于如何"触发"DEP违规的信息.
你有一个例子吗?
相关问题:https://serverfault.com/questions/130716/if-dep-has-stopped-an-app-is-there-a-possibility-to-see-this-events-in-a-log
显示DEP vialotion在日志中的外观
Dav*_*nan 10
这段代码完成了工作:
procedure DoJump(Address: Pointer);
asm
JMP Address
end;
const
X: Byte=$C3;//RET op code
procedure TriggerDEP;
begin
DoJump(@X);
end;
Run Code Online (Sandbox Code Playgroud)
在生成的可执行文件中,X
存储的位置被视为数据.作为替代方案,您可以尝试执行位于堆栈上的代码:
procedure DoJump(Address: Pointer);
asm
JMP Address
end;
procedure TriggerDEP;
var
X: Byte;
begin
X := $C3;
DoJump(@X);
end;
Run Code Online (Sandbox Code Playgroud)
当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;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1225 次 |
最近记录: |