windows - 在delphi中如何直接从内存中执行代码?

标签 windows delphi api loadlibrary

是否可以模仿 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/

相关文章:

c++ - 将 Qt 与 DirectX 一起使用?

c++ - 让 gprof 从 Qt 调试应用程序读取 gmon.out 输出的问题

delphi - 在Delphi中压缩和加密

java - 如何从 URI(jena、RDF、dbpedia)获取所有属性?

c# - 使用数据绑定(bind)从 UI 更改数据

java - 获取有关 WiFi 网络的信息

delphi - 德尔福持续集成系统

delphi - 将通用数组打印到控制台

django - 从另一个 View 调用服务器上的API

python - 使用 Python 的 Autodesk Inventor API