是否可以模仿 loadlibrary
函数?我想从 BLOB 字段加载一个库而不先将其写入临时文件,我需要一个不依赖于特定版本的 delphi 编译器或 Windows,并且不触发防病毒软件的解决方案。
最佳答案
是的,你可以,而且你不需要 loadlibrary
从内存中执行代码 - 你需要使用 VirtualAlloc 分配内存函数 PAGE_EXECUTE旗帜组
更新:这是从内存中为 32 位 Delphi 执行的代码的快速演示 - 我只测试了它是否有效:
type
TIncMe = procedure(var I: Integer);
var
IncMeProc: TIncMe;
procedure IncMe(var I: Integer);
begin
Inc(I);
end;
procedure CopyIncMe;
var
Size: LongWord;
Tmp: Pointer;
begin
Size:= LongWord(@CopyIncMe) - LongWord(@IncMe);
Tmp:= VirtualAlloc(nil, Size, MEM_COMMIT or MEM_RESERVE, PAGE_EXECUTE_READWRITE);
Move(Pointer(@IncMe)^, Tmp^, Size);
IncMeProc:= Tmp;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
J: Integer;
begin
J:= 0;
CopyIncMe;
while J < 10 do begin
IncMeProc(J);
ShowMessage(IntToStr(J));
end;
VirtualFree(@IncMeProc, 0, MEM_RELEASE);
end;
关于windows - 在delphi中如何直接从内存中执行代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12171769/