-
-
[求助]一个CheatEngine中Lua编程地址偏移的语法的问题【已解决】
-
发表于:
2019-10-11 13:29
4732
-
[求助]一个CheatEngine中Lua编程地址偏移的语法的问题【已解决】
【这段为废话】本人10+年的看雪老人,却偏偏还是一个老萌新。求版主高抬贵手莫把这个简单问题求助帖给和谐了,因为这个简单问题度娘找不到,帖吧也没有,拿来主义又太多,根本没有营养。虽然只是闲暇玩下手游,但咱还是要追求下用程序控制程序的超然乐趣。
【正题:】
function MyScan777()
//......++++++代码省略++++++
Scan.firstScan(soExactValue, vtGrouped, rtExtremerounded, "4:1013 4:1 4:1067450368", "", StartAddress, EndAddress, "", fsmAligned, "4", false, false, false, false);
//......----------代码省略----------
end
local addrList = getAddressList();
local result = MyScan777();
local count = result.getCount();
for i=0, count-1, 1 do
//+++++核心问题++++++++
local addr = result.getAddress(i);
//--local addr_1 = [addr + 0x00000004];//这是个错误的表达示,高手因该知道我的问题了。这个表达式正确的方式该如何写
writeFloat(addr_1,0.4);
//--local addr_2 = [addr + 0x00000008];//同上问题
writeFloat(addr_2,0.8);
//---------核心问题--------------
end
//内存状态如下:
//4DFF0000 1013 --addr地址变量指向这里
//4DFF0004 1
//4DFF0008 1067450368 --需要addr_1指向这里
//4DFF000C 1067450368 --eraddr_2指向这里
【问题说明:】
整段代码的用意是基址难找,用特征码快速定位需要修改的地方。这个搜索在GG里面叫联合搜索,在CE里面叫群组搜索。
我使用群组搜索,定位到了我需要操作的内存,现在如代码中++核心问题++里描述的语句一样,我该如何写这里的代码才能正确的实现内存地址的偏移?
【解决问题:】
感谢官网论坛 mgr.inz.Player做出的解答。
...
local addr_N = tonumber(result.getAddress(i), 16); //程序内传递的地址为string的字符串,直接用【字符串】+【数字】不正确
...
writeFloat("addr_N + 0x8", 0.4); //这时的addr存储的是0x数形的参数才能相加
writeFloat("addr_N + 0xC", 0.8);
...
【问题解决说明:】
问题代码中 addr == “4DFF0000” ~=4DFF0000
明眼人就能看出来数型和字符型的赋值后的变量效果
但在用writeFloat这种内存操作指令进行内存改写的时候需要吧"addr_N+0.4"用双引号再变换回字符型。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
最后于 2019-10-12 10:27
被LEEzeal编辑
,原因: 问题已解决