iMa*_*ari 3 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;
Run Code Online (Sandbox Code Playgroud)
dzlib包含一个现成的对象,用于将资源从资源读入内存并使用它而无需将其保存到光盘:
这是主要档案......
http://sourceforge.net/p/dzlib/code/147/tree/dzlib/trunk/src/u_dzResourceDllLoader.pas
..但它需要来自同一存储库的其他文件.
| 归档时间: |
|
| 查看次数: |
1858 次 |
| 最近记录: |