检查系统是否支持DEP(数据执行保护)?
DEP需要硬件和软件的支持,Windows XP SP2或以上版本可以支持DEP,DEP实际上就是不允许更改代码段,不允许从数据段中执行代码,所以要检测是否支持DEP,只要认为地在数据段中执行一次代码就知道了,如果发生异常,就是有DEP的,不发生异常,就是没有DEP保护的:
function IsDEP: Boolean;
var
Code: Byte;
begin
Code := $C3; // ret
Result := false;
try
TProcedure(@Code);
except
on E: EAccessViolation do
if E.ExceptionRecord^.ExceptionAddress = @Code then
Result := true
else
raise;
end;
end;