跳到主要内容

搜索内存 (memory.search)

声明

搜索结果表, 失败原因 = memory.search(进程号, 是否开始新一轮搜索, 起始偏移地址, 搜索条件表, 全局搜索数据类型[, 最大返回结果数量])

参数及返回值

  • 进程号
    • 整数型,App 进程号
  • 是否开始新一轮搜索
    • 布尔型,true 表示开始新一轮搜索,false 表示在上一轮搜索结果基础上继续搜索
  • 起始偏移地址
    • 整数型
  • 搜索条件表
    • 顺序表,搜索条件表中的每一项都是一个搜索条件关联表,搜索条件表中的搜索条件将会被逐一应用于搜索结果,以缩小搜索范围。搜索条件关联表的键值对如下:
      • offset - 整数型,搜索条件的偏移地址
      • lv - 整数型,搜索条件左值
      • hv - 整数型,搜索条件右值
      • type - 数据类型
  • 全局搜索数据类型
    • 数据类型,若搜索条件表中某一项搜索条件的 typenil,则使用此参数作为该搜索条件的数据类型
  • 最大返回结果数量
    • 整数型,可选,默认为 9999。可设置为 0,表示不限制返回结果数量
  • 搜索结果表
    • 整数型顺序表,其中每一项都是一个符合条件的内存地址,操作失败则为 nil
  • 失败原因
    • 文本型

搜索条件表结构

{
-- 以下顺序表填入几个搜索几次,大于一次即为联合搜索
-- 第一次查询搜索数据:以 "无符号8位整数" 的数据类型过滤出大于 1,小于 10 的数据地址(首次搜索 offset 无作用)
{
lv = 1, -- 模糊搜索,搜索内容 >= lv 值,不填 hv 为精确搜索,必填
hv = 10, -- 模糊搜索,搜索内容 <= hv 值,不填 hv 为精确搜索,可不填
type = "U8" -- 数据类型,指定这条数据用 "无符号8位整数" 的类型进行搜索,可不填,默认与 "全局搜索类型" 参数一致
},
-- 第二次过滤搜索数据:以 "有符号8位整数" 的数据类型过滤出大于 2,小于 10, 且相对于上一个数据偏移量为 100 字节的数据地址
{
lv = 2, -- 模糊搜索,搜索内容 >= lv 值,不填 hv 为精确搜索,必填
hv = 10, -- 模糊搜索,搜索内容 <= hv 值,不填 hv 为精确搜索,可不填
offset = 100, -- 可不填,默认为 0,不能为负数
type = "I8" -- 数据类型,指定这条数据用 "有符号8位整数" 的类型进行搜索,可不填,默认与 "全局搜索类型" 参数一致
},
...
}

说明

首轮搜索需要指定 是否开始新一轮搜索true,以开启新一轮搜索。

后续搜索需要指定 是否开始新一轮搜索false,以在上一轮搜索的基础上继续搜索。

这样做,保证了多次搜索的结果是上一次搜索的结果的子集,即第一次搜索的结果是所有符合条件的数据,第二次搜索的结果筛选出第一次搜索结果中符合条件的数据,以此类推。直至搜索结果数量足够小,或者搜索条件不再满足,即可停止搜索。

联合搜索

联合搜索通常用于在内存中搜索出符合多个条件特征的结构体

若搜索条件表中只有一项,则为普通搜索,若搜索条件表中有多项,则为联合搜索。

搜索条件表中的每一项都是一个搜索条件,每个搜索条件都会在满足上一个搜索条件的基础上进行检查,如果条件不满足,则将数据从搜索结果中剔除。

联合搜索的搜索条件为所有搜索条件的交集。