Delphi 为什么DEP不会停止执行从外部文件加载的部分代码?
我利用了很久以前在互联网上发布的一个项目。这里是细节,为了简洁和清晰,所有不相关的东西都被剥离了Delphi 为什么DEP不会停止执行从外部文件加载的部分代码?,delphi,windows-7,32-bit,dep,Delphi,Windows 7,32 Bit,Dep,我利用了很久以前在互联网上发布的一个项目。这里是细节,为了简洁和清晰,所有不相关的东西都被剥离了 一种二进制文件,其内容如下所述 十六进制转储: 55 89 E5 83 EC 08 C7 45 FC 00 00 00 00 8B 45 FC 3B 45 10 72 02 EB 19 8B 45 FC 8B 55 0C 01 C2 8B 45 FC 03 45 08 8A 00 88 02 8D 45 FC FF 00 EB DD C6 45 FA 00 83 7D 10 01 76 6C
一种二进制文件,其内容如下所述 十六进制转储:
55 89 E5 83 EC 08 C7 45 FC 00 00 00 00 8B 45 FC
3B 45 10 72 02 EB 19 8B 45 FC 8B 55 0C 01 C2 8B
45 FC 03 45 08 8A 00 88 02 8D 45 FC FF 00 EB DD
C6 45 FA 00 83 7D 10 01 76 6C 80 7D FA 00 74 02
EB 64 C6 45 FA 01 C7 45 FC 00 00 00 00 8B 45 10
48 39 45 FC 72 02 EB E2 8B 45 FC 8B 4D 0C 01 C1
8B 45 FC 03 45 0C 8D 50 01 8A 01 3A 02 73 30 8B
45 FC 03 45 0C 8A 00 88 45 FB 8B 45 FC 8B 55 0C
01 C2 8B 45 FC 03 45 0C 40 8A 00 88 02 8B 45 FC
03 45 0C 8D 50 01 8A 45 FB 88 02 C6 45 FA 00 8D
45 FC FF 00 EB A7 C9 C2 0C 00 90 90 90 90 90 90
加载到内存中并使用以下方法执行
var
MySrcArray,
MyDestArray: array [1 .. 15] of Byte;
// ...
MyBuffer: Pointer;
TheProc: procedure;
SortIt: procedure(ASrc, ADest: Pointer; ASize: LongWord); stdcall;
begin
// Initialization of MySrcArray with random Bytes and display here ...
// Instructions of loading of the binary file into MyBuffer using merely **GetMem** here ...
@SortIt := MyBuffer;
try
SortIt(@MySrcArray, @MyDestArray, 15);
// Display of MyDestArray (The outcome of the processing !)
except
// Invalid code error handling
end;
// Cleaning code here ...
end;
在我的盒子上很有魅力
我的问题:
如果不使用
VirtualAlloc
和/或VirtualProtect
,它是如何工作的 我想你是在问为什么这项工作没有被人阻止?对于32位程序,DEP默认为opt-in,这意味着应用程序必须显式启用它
如果您将DEP设置更改为“为除我选择的程序和服务之外的所有程序和服务启用DEP”,则您的应用程序将触发DEP警告并崩溃。我想您会问,为什么这项操作不会被阻止?对于32位程序,DEP默认为opt-in,这意味着应用程序必须显式启用它
如果将DEP设置更改为“为除我选择的程序和服务之外的所有程序和服务启用DEP”,则应用程序将触发DEP警告并崩溃。确实是,它与DEP有关。确实是,它与DEP有关。