gpt4 book ai didi

delphi - Delphi 的简单数据执行预防示例代码

转载 作者:行者123 更新时间:2023-12-03 14:52:15 25 4
gpt4 key购买 nike

对于测试“崩溃”,我需要一小段 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 在日志中的样子

最佳答案

这段代码完成了工作:

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 位进程中,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;

关于delphi - Delphi 的简单数据执行预防示例代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11134027/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com