Ai
1 Star 0 Fork 0

phy0292/cheat-engine

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
LuaDebug.pas 2.79 KB
一键复制 编辑 原始数据 按行查看 历史
cheat-engine 提交于 2019-12-20 00:49 +08:00 . Fix registry issues
unit LuaDebug;
{This unit will hold the debug_ specific lua functions, not related to lua debugging}
{$mode delphi}
interface
uses
Classes, SysUtils, newkernelhandler, debug, DebugHelper,
DebuggerInterfaceAPIWrapper, lua, lualib, lauxlib, LuaHandler{$ifdef darwin},macport{$endif};
procedure initializeLuaDebug;
implementation
function debug_setLastBranchRecording(L: PLua_State): integer; cdecl;
var
parameters: integer;
newstate: boolean;
begin
OutputDebugString('debug_setLastBranchRecording');
result:=0;
parameters:=lua_gettop(L);
{$ifdef windows}
if parameters=1 then
begin
newstate:=lua_toboolean(L, -1);
DBKDebug_SetStoreLBR(newstate);
end;
{$endif}
lua_pop(L, parameters);
end;
function debug_getMaxLastBranchRecord(L: PLua_State): integer; cdecl;
var
max: integer;
begin
result:=1;
if CurrentDebuggerInterface<>nil then
max:=CurrentDebuggerInterface.GetLastBranchRecords(nil)
else
max:=-1;
lua_pop(L, lua_gettop(L));
lua_pushinteger(L, max);
end;
function debug_getLastBranchRecord(L: PLua_State): integer; cdecl;
type TQwordArray=array [0..0] of qword;
PQwordArray=^Tqwordarray;
var
parameters: integer;
value: ptruint;
max: integer;
index: integer;
lbrbuf: PQwordArray;
begin
result:=0;
parameters:=lua_gettop(L);
if parameters=1 then
begin
index:=lua_tointeger(L, -1);
lua_pop(L, parameters);
if CurrentDebuggerInterface<>nil then
begin
max:=CurrentDebuggerInterface.GetLastBranchRecords(nil);
getmem(lbrbuf, max*sizeof(qword));
try
max:=CurrentDebuggerInterface.GetLastBranchRecords(lbrbuf);
if index<=max then
lua_pushinteger(L, lbrbuf[index]);
result:=1;
finally
FreeMemAndNil(lbrbuf);
end;
end;
end
else
lua_pop(L, parameters);
end;
function debug_getXMMPointer(L: PLua_State): integer; cdecl;
var
c: ptruint;
xmmreg: integer;
parameters: integer;
begin
result:=1;
c:=0;
parameters:=lua_gettop(L);
if parameters=1 then
begin
xmmreg:=lua_tointeger(L, -1);
if (debuggerthread<>nil) and (debuggerthread.CurrentThread<>nil) then
c:=ptruint(@debuggerthread.CurrentThread.context.{$ifdef cpu64}FltSave.XmmRegisters{$else}ext.XMMRegisters.LegacyXMM{$endif}[xmmreg]);
end;
lua_pop(L, lua_gettop(L));
lua_pushinteger(L, c);
end;
procedure initializeLuaDebug;
begin
lua_register(LuaVM, 'debug_setLastBranchRecording', debug_setLastBranchRecording);
lua_register(LuaVM, 'debug_getMaxLastBranchRecord', debug_getMaxLastBranchRecord);
lua_register(LuaVM, 'debug_getLastBranchRecord', debug_getLastBranchRecord);
lua_register(LuaVM, 'debug_getXMMPointer', debug_getXMMPointer);
end;
end.
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/phy0292/cheat-engine.git
git@gitee.com:phy0292/cheat-engine.git
phy0292
cheat-engine
cheat-engine
master

搜索帮助