export the SavedResultHandler to lua
This commit is contained in:
parent
23cd930baf
commit
ec8e7d0f8e
@ -12,7 +12,7 @@ procedure initializeMemscan;
|
||||
|
||||
implementation
|
||||
|
||||
uses luaclass, LuaObject;
|
||||
uses luaclass, LuaObject, savedscanhandler;
|
||||
|
||||
resourcestring
|
||||
rsNotAllParametersHaveBeenProvided = 'Not all parameters have been provided';
|
||||
@ -167,6 +167,58 @@ begin
|
||||
result:=1;
|
||||
end;
|
||||
|
||||
function memscan_getSavedResultHandler(L: Plua_State): integer; cdecl;
|
||||
var
|
||||
memscan: TMemscan;
|
||||
name: string;
|
||||
ssh: TSavedscanHandler;
|
||||
begin
|
||||
result:=0;
|
||||
memscan:=luaclass_getClassObject(L);
|
||||
if lua_gettop(L)>=1 then
|
||||
begin
|
||||
name:=Lua_ToString(L, -1);
|
||||
try
|
||||
ssh:=TSavedScanHandler.create(memscan.GetScanFolder,name);
|
||||
ssh.AllowNotFound:=true;
|
||||
ssh.AllowRandomAccess:=true;
|
||||
ssh.memscan:=memscan;
|
||||
luaclass_newClass(L,ssh);
|
||||
exit(1);
|
||||
except
|
||||
on e: exception do
|
||||
begin
|
||||
lua_pushnil(L);
|
||||
lua_pushstring(L,e.message);
|
||||
exit(2);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
function memscan_getSavedResultList(L: Plua_State): integer; cdecl;
|
||||
var
|
||||
memscan: TMemscan;
|
||||
r: tstringlist;
|
||||
i: integer;
|
||||
begin
|
||||
memscan:=luaclass_getClassObject(L);
|
||||
r:=tstringlist.create;
|
||||
memscan.getsavedresults(r);
|
||||
lua_createtable(L,r.count,0);
|
||||
|
||||
for i:=0 to r.count-1 do
|
||||
begin
|
||||
lua_pushinteger(L,i+1);
|
||||
lua_pushstring(L, r[i]);
|
||||
lua_settable(L,-3);
|
||||
end;
|
||||
|
||||
result:=1;
|
||||
|
||||
|
||||
r.free;
|
||||
end;
|
||||
|
||||
function memscan_saveCurrentResults(L: Plua_State): integer; cdecl;
|
||||
var
|
||||
@ -251,6 +303,8 @@ begin
|
||||
luaclass_addClassFunctionToTable(L, metatable, userdata, 'waitTillDone', memscan_waitTillDone);
|
||||
luaclass_addClassFunctionToTable(L, metatable, userdata, 'getProgress', memscan_getProgress);
|
||||
luaclass_addClassFunctionToTable(L, metatable, userdata, 'saveCurrentResults', memscan_saveCurrentResults);
|
||||
luaclass_addClassFunctionToTable(L, metatable, userdata, 'getSavedResultList', memscan_getSavedResultList);
|
||||
luaclass_addClassFunctionToTable(L, metatable, userdata, 'getSavedResultHandler', memscan_getSavedResultHandler);
|
||||
luaclass_addClassFunctionToTable(L, metatable, userdata, 'getAttachedFoundlist', memscan_getAttachedFoundlist);
|
||||
luaclass_addClassFunctionToTable(L, metatable, userdata, 'setOnlyOneResult', memscan_setreturnOnlyOneResult);
|
||||
luaclass_addClassFunctionToTable(L, metatable, userdata, 'getOnlyResult', memscan_getOnlyResult);
|
||||
|
@ -26,6 +26,7 @@ begin
|
||||
|
||||
if ShouldAppsUseDarkMode and (parent<>nil) then
|
||||
begin
|
||||
ToolTips:=false;
|
||||
AllowDarkModeForWindow(handle, 1);
|
||||
SetWindowTheme(Handle, 'explorer', nil);
|
||||
|
||||
|
@ -4,7 +4,7 @@ Additions and changes:
|
||||
structure dissect add to addresslist uses the addressstring instead of number, so symbols will be preserved
|
||||
structure dissect now has a option to save the previous state of a column and show changes easier
|
||||
Added {$LUACODE} blocks for inline Lua coding
|
||||
Added a c-compiler to CE (compile)
|
||||
Added a c-compiler to CE
|
||||
Added {$C} blocks to the auto assembler. all {$C} blocks get combined into one script before execution
|
||||
Added {$CCODE} blocks for inline C coding (Check the forum, wiki, CE patreon discord or CE's youtube)
|
||||
Added a C# compiler (compilecs)
|
||||
@ -34,14 +34,17 @@ Fixes:
|
||||
fixed assembling movsq
|
||||
fixed ultimap ret filter
|
||||
fixed luapipe never calling OnError
|
||||
fixed vehdebug in 64-bit CE zeroing out the FPU registers in 32-bit targets
|
||||
fixed DBVM find what access/writes sometimes skipping entries on AMD
|
||||
fixed undo not working on memory records when using the single line editor
|
||||
fixed hide children group option when loading a table
|
||||
|
||||
lua:
|
||||
changes:
|
||||
saveTable won't ask to sign the table anymore
|
||||
messageDialog will work if you omit the buttonlist. (Defaults to mbOK then)
|
||||
added more customizabe button
|
||||
registerSymbol no longer errors out the whole script on failure. It now overwrites existing symbols
|
||||
|
||||
New functions:
|
||||
form.saveToStream
|
||||
@ -51,8 +54,10 @@ lua:
|
||||
signTable
|
||||
symbollist.getModuleList
|
||||
symbollist.getSymbolList
|
||||
memscan.getSavedResultHandler
|
||||
memscan.getSavedResultList
|
||||
|
||||
|
||||
SavedResultHandler class
|
||||
|
||||
|
||||
How to use:
|
||||
|
@ -131,7 +131,10 @@ type
|
||||
lastFail: integer;
|
||||
AllowRandomAccess: boolean; //set this if you wish to allow random access through the list. (EXTREMELY INEFFICIENT IF IT HAPPENS, addresslist purposes only)
|
||||
AllowNotFound: boolean; //set this if you wish to return nil instead of an exception if the address can't be found in the list
|
||||
|
||||
memscan: TObject;
|
||||
function getpointertoaddress(address:ptruint;valuetype:TVariableType; ct: TCustomType; recallifneeded: boolean=true): pointer;
|
||||
function getStringFromAddress(address: ptruint; out r: string; Hexadecimal: boolean=false; Signed: boolean=false): boolean;
|
||||
|
||||
procedure deinitialize;
|
||||
procedure reinitialize;
|
||||
@ -144,7 +147,8 @@ end;
|
||||
|
||||
implementation
|
||||
|
||||
uses Math, globals;
|
||||
uses Math, globals, memscan, lua, lauxlib, lualib, LuaClass, LuaObject,
|
||||
LuaHandler, byteinterpreter;
|
||||
|
||||
resourcestring
|
||||
rsMaxaddresslistcountIs0MeansTheAddresslistIsBad = 'maxaddresslistcount is 0 (Means: the addresslist is bad)';
|
||||
@ -296,6 +300,24 @@ begin
|
||||
LastAddressAccessed.index:=0; //reset the index
|
||||
end;
|
||||
|
||||
function TSavedScanHandler.getStringFromAddress(address: ptruint; out r: string; Hexadecimal: boolean=false; Signed: boolean=false): boolean;
|
||||
var
|
||||
p: pointer;
|
||||
ms: TMemScan;
|
||||
begin
|
||||
result:=false;
|
||||
if memscan=nil then exit;
|
||||
|
||||
|
||||
ms:=TMemscan(memscan);
|
||||
p:=getpointertoaddress(address, ms.VarType, ms.Customtype);
|
||||
if p<>nil then
|
||||
begin
|
||||
r:=readAndParsePointer(address, p, ms.VariableType, ms.Customtype, hexadecimal, Signed);
|
||||
result:=true;
|
||||
end;
|
||||
end;
|
||||
|
||||
function TSavedScanHandler.getpointertoaddress(address:ptruint;valuetype:TVariableType; ct: Tcustomtype; recallifneeded: boolean=true): pointer;
|
||||
var i,j: integer;
|
||||
pm: ^TArrMemoryRegion;
|
||||
@ -773,5 +795,57 @@ begin
|
||||
deinitialized:=false;
|
||||
end;
|
||||
|
||||
|
||||
//---------------LUA-------------------
|
||||
function savedscanhandler_getStringFromAddress(L: PLua_State): integer; cdecl;
|
||||
var
|
||||
address: ptruint;
|
||||
ssh: TSavedScanHandler;
|
||||
r: string;
|
||||
hexadecimal, signed: boolean;
|
||||
begin
|
||||
result:=0;
|
||||
ssh:=luaclass_getClassObject(L);
|
||||
if lua_gettop(L)>=1 then
|
||||
begin
|
||||
try
|
||||
address:=lua_toaddress(L,1);
|
||||
except
|
||||
on e: exception do
|
||||
begin
|
||||
lua_pushnil(L);
|
||||
lua_pushstring(L, e.Message);
|
||||
exit(2);
|
||||
end;
|
||||
end;
|
||||
|
||||
if lua_Gettop(L)>=2 then
|
||||
hexadecimal:=lua_toboolean(L,2)
|
||||
else
|
||||
hexadecimal:=false;
|
||||
|
||||
if lua_getProperty(L)>=3 then
|
||||
signed:=lua_toboolean(L,3)
|
||||
else
|
||||
signed:=false;
|
||||
|
||||
if ssh.getStringFromAddress(address,r, hexadecimal, signed) then
|
||||
lua_pushstring(L,r)
|
||||
else
|
||||
lua_pushnil(L);
|
||||
|
||||
result:=1;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure savedscanhandler_addMetaData(L: PLua_state; metatable: integer; userdata: integer );
|
||||
begin
|
||||
object_addMetaData(L, metatable, userdata);
|
||||
luaclass_addClassFunctionToTable(L, metatable, userdata, 'getStringFromAddress', savedscanhandler_getStringFromAddress);
|
||||
end;
|
||||
|
||||
initialization
|
||||
luaclass_register(TSavedScanHandler, savedscanhandler_addMetaData);
|
||||
|
||||
end.
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user