add loadModule(memorystream, internalfilename, executeEntryPoint OPTIONAL default=true, timeout OPTIONAL default=nil=infinite)
This commit is contained in:
parent
85f8dc1587
commit
c83cfcece2
@ -27,9 +27,17 @@ var
|
||||
|
||||
usetimeout: boolean=false;
|
||||
timeout: integer;
|
||||
|
||||
paramoffset: integer;
|
||||
|
||||
o: TObject;
|
||||
ms: tmemorystream absolute o;
|
||||
begin
|
||||
result:=0;
|
||||
paramoffset:=0;
|
||||
if lua_gettop(L)>=1 then
|
||||
begin
|
||||
if lua_isstring(L,1) then
|
||||
begin
|
||||
filename:=Lua_ToString(L,1);
|
||||
try
|
||||
@ -43,20 +51,35 @@ begin
|
||||
exit(2);
|
||||
end;
|
||||
end;
|
||||
|
||||
end
|
||||
else
|
||||
if lua_isuserdata(L,1) then
|
||||
begin
|
||||
o:=lua_toceuserdata(L, 1);
|
||||
if o is TMemoryStream then //(memstream, filename, executeEntrypoint, timeout)
|
||||
begin
|
||||
if lua_gettop(L)>=2 then
|
||||
executeEntryPoint:=lua_toboolean(L,2)
|
||||
filename:=Lua_ToString(L,2);
|
||||
|
||||
ml:=TModuleLoader.create(ms, filename);
|
||||
ml.createSymbolListHandler;
|
||||
paramoffset:=1;
|
||||
end;
|
||||
end;
|
||||
|
||||
if lua_gettop(L)>=2+paramoffset then
|
||||
executeEntryPoint:=lua_toboolean(L,2+paramoffset)
|
||||
else
|
||||
executeEntryPoint:=true;
|
||||
|
||||
if lua_gettop(L)>=3 then
|
||||
if lua_gettop(L)>=3+paramoffset then
|
||||
begin
|
||||
if lua_isnil(L,3) then
|
||||
if lua_isnil(L,3+paramoffset) then
|
||||
useTimeout:=false
|
||||
else
|
||||
begin
|
||||
useTimeout:=true;
|
||||
timeout:=lua_tointeger(L,3);
|
||||
timeout:=lua_tointeger(L,3+paramoffset);
|
||||
end;
|
||||
end
|
||||
else
|
||||
|
@ -38,10 +38,12 @@ type TModuleLoader=class
|
||||
importlist: TStringHashList;
|
||||
procedure cleanupExportList;
|
||||
function FindKernelModuleExport(modulename: string; exportname: string): ptruint;
|
||||
procedure createFromMemoryStream(memstream: tmemorystream);
|
||||
public
|
||||
Exporttable: TStringlist;
|
||||
procedure createSymbolListHandler;
|
||||
constructor create(filename: string);
|
||||
constructor create(memstream: tmemorystream; filename: string='<memstream>.dll');
|
||||
published
|
||||
property BaseAddress: ptruint read destinationBase;
|
||||
property Loaded: boolean read FLoaded;
|
||||
@ -67,6 +69,7 @@ var
|
||||
begin
|
||||
module:=ExtractFileName(filename);
|
||||
fSymbolList:=TSymbolListHandler.create;
|
||||
fSymbolList.name:=filename;
|
||||
|
||||
fSymbolList.AddModule(module,filename,destinationbase,modulesize,is64bit);
|
||||
|
||||
@ -104,7 +107,28 @@ begin
|
||||
result:=0;
|
||||
end;
|
||||
|
||||
constructor TModuleLoader.create(memstream: tmemorystream; filename: string='<memstream>.dll');
|
||||
begin
|
||||
inherited create;
|
||||
|
||||
self.filename:=filename;
|
||||
createFromMemoryStream(memstream);
|
||||
end;
|
||||
|
||||
constructor TModuleLoader.create(filename: string);
|
||||
var m: TMemoryStream;
|
||||
begin
|
||||
inherited create;
|
||||
|
||||
self.filename:=filename;
|
||||
|
||||
m:=tmemorystream.create;
|
||||
m.LoadFromFile(filename);
|
||||
createFromMemoryStream(m);
|
||||
m.free;
|
||||
end;
|
||||
|
||||
procedure TModuleLoader.createFromMemoryStream(memstream: tmemorystream);
|
||||
var
|
||||
i,j,k: integer;
|
||||
filemap: TMemorystream;
|
||||
@ -134,11 +158,6 @@ var
|
||||
processhandle: thandle;
|
||||
mi: TModuleInfo;
|
||||
begin
|
||||
inherited create;
|
||||
|
||||
|
||||
self.filename:=filename;
|
||||
|
||||
exporttable:=tstringlist.create;
|
||||
|
||||
pid:=processid;
|
||||
@ -148,15 +167,9 @@ begin
|
||||
|
||||
processhandle:=dbk32functions.OP(ifthen<dword>(GetSystemType<=6,$1f0fff, process_all_access), true, pid);
|
||||
|
||||
filemap:=tmemorystream.Create;
|
||||
filemap:=memstream;
|
||||
filemap.Position:=0;
|
||||
try
|
||||
//showmessage('Loading '+filename);
|
||||
|
||||
|
||||
//todo: add a filesearch if no patch is given
|
||||
|
||||
filemap.LoadFromFile(filename);
|
||||
|
||||
if PImageDosHeader(filemap.Memory)^.e_magic<>IMAGE_DOS_SIGNATURE then
|
||||
raise exception.create(rsMMLNotAValidFile);
|
||||
|
||||
@ -422,8 +435,6 @@ begin
|
||||
tempmap.free;
|
||||
end;
|
||||
finally
|
||||
filemap.free;
|
||||
|
||||
cleanupExportList;
|
||||
end;
|
||||
end;
|
||||
|
@ -3737,6 +3737,7 @@ methods
|
||||
|
||||
ModuleLoader(Inheritance: -)
|
||||
loadModule(pathtodll, executeEntryPoint OPTIONAL default=true, timeout OPTIONAL default=nil=infinite)
|
||||
loadModule(memorystream, internalfilename, executeEntryPoint OPTIONAL default=true, timeout OPTIONAL default=nil=infinite)
|
||||
|
||||
properties:
|
||||
loaded: boolean - true if successfuly mapped
|
||||
|
Loading…
Reference in New Issue
Block a user