跳到主要内容

Sys.MemorySearch 搜索内存(不支持IOS)

🎯功能

搜索指定应用的内存,支持联合搜索,支持在上一次的搜索结果上再次搜索过滤。

📜语法

结果 = Sys.MemorySearch(应用名称, 是否新搜索, 内存起始地址, 待搜索数据, 数据类型, 搜索精度[, 搜索次数])

📥参数

参数数据类型解释
应用名称字符串待搜索的应用程序包名。
是否新搜索布尔型true表示新搜索,false表示搜索是基于的搜索结果按照待搜索数据的条件进行筛选(此时读写内存起始地址参数无效)。
内存起始地址字符串以0x开头的的字符串地址,如:"0x40947bf8"。
待搜索数据键表型具体搜索规则可看备注。
数据类型字符串搜索的数据类型,参数必须为 ('I8' 'I16' 'I32' 'I64' 'U8' 'U16' 'U32' 'U64' 'F32' 'F64')其中之一。
搜索精度数值型取值0-2,0表示搜索范围最广,但速度相对也最慢,依此类推。
搜索次数数值型可选参数,查询搜索结果的上限,省略默认值: 1024。

📤返回

字符串数组 ,搜索成功返回数组,失败返回空。

💡示例

Dim 当前应用包名
当前应用包名 = sys.GetFront()
TracePrint 当前应用包名
'以下是以"比武招亲(武林萌主)游戏为例子,通过搜索内存返回的结果进行偏移读取人物信息面板里的等级、经验等数据"
Dim addr = "0x0"
'下面定义的表数据可通过烧饼修改器等内存搜索工具来查找对比获得
Dim tb1 = {"lv":5389}
Dim tb2 = {"lv":5390,"offset":24}
Dim tb = {tb1, tb2}
Dim t = TickCount()
Dim A = Sys.MemorySearch(当前应用包名, True,addr, tb, "i32",0,1)
TracePrint "搜索地址为:"&A(0)&",耗时"&(TickCount()-t)
Dim 等级地址 = 地址相加(A(0), 116)
TracePrint "当前等级为:"&Sys.MemoryRead(当前应用包名,等级地址, "i32")
Dim 当前经验值地址 = 地址相加(A(0), 128)
TracePrint "当前经验值为:"&Sys.MemoryRead(当前应用包名,当前经验值地址, "i32")
Dim 战斗力地址 = 地址相加(A(0), 236)
TracePrint "当前战斗力为:"&Sys.MemoryRead(当前应用包名,战斗力地址, "i32")
Function 地址相加(地址, 偏移)
Dim A = Right(地址,Len(地址)-2)
Dim B = Clng("0x"&A)
Dim C = B+偏移
Dim D = Hex(C)
Dim E = "0x"&D
地址相加 = E
End Function

📘备注

  • 搜索规则如下:先搜索tb数组第一个元素里定义的搜索条件,tb数组里第二个元素的再根据第一次搜索的结果集按条件进行筛选,以此类推。
  • 定义例子如下:
tb = {
-- 以下 数组 填入几个搜索几次,大于1次即为联合搜索
-- 第一次查询搜索数据 大于lv,小于hv,首次搜索offset无作用
{
["lv"] = 1, -- 模糊搜索,搜索内容>=lv值,不填hv为精确搜索,必填
["hv"] = 10, -- 模糊搜索,搜索内容<=hv值,不填hv为精确搜索,可不填
["type"] = "u8", -- 数据类型,指定这条数据用" 无符号的8位整数"的类型进行搜索,可不填,默认与dataType参数一致
["offset"] = 100 -- 基于读写内存起始地址的偏移 可不填默认为0
},
-- 第二次查询搜索数据 大于lv 2,小于hv 10, 偏移100(相对于第一次查询到结果地址 + 100)
{
["lv"] = 2, -- 模糊搜索,搜索内容>=lv值,不填hv为精确搜索,必填
["hv"] = 10, -- 模糊搜索,搜索内容<=hv值,不填hv为精确搜索,可不填
["offset"] = 100, -- 基于读写内存起始地址的偏移 可不填默认为0
["type"] = "i8" -- 数据类型,指定这条数据用" 有符号的8位整数"的类型进行搜索,可不填,默认与dataType参数一致
},
...
-- 第三、第四....
}