Sys.MemoryWrite 写入内存(不支持IOS)

文章目录
  1. 1. 功能
  2. 2. 语法
  3. 3. 参数
  4. 4. 返回值
  5. 5. 示例
  6. 6. 备注

功能

写入值到应用的指定内存地址。

语法

结果 = Sys.MemoryWrite(应用名称, 内存地址, 写入值, 数据类型)

参数

参数 数据类型 解释
应用名称 字符串 待搜索的应用程序包名。
内存地址 字符串 以0x开头的的字符串地址,如:”0x40947bf8”。
写入值 字符串 待写入的内容,如”1234”。
数据类型 字符串 搜索的数据类型,参数必须为 (‘I8’ ‘I16’ ‘I32’ ‘I64’ ‘U8’ ‘U16’ ‘U32’ ‘U64’ ‘F32’ ‘F64’)其中之一。

返回值

布尔型,写入成功返回true,失败返回false(当为false时表示此内存区域是不能写入的)。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
Dim 当前应用包名
//以下是以"比武招亲(武林萌主)游戏为例
当前应用包名 = "com.hummingbird.zhaoqin.youai"
TracePrint 当前应用包名
Dim addr = "0x0"
//第一个数据(第二个步骤中定位的地址)
Dim tb1 = {"lv":5389}
//第二个数据,以及他相对于第一个数据的偏移(第二个步骤中定位的地址)
Dim tb2 = {"lv":5390,"offset":24}
//没错,如此漫长的定位,实际上就是为上面的两个table(T_T)
Dim tb = {tb1, tb2}
Dim t = TickCount()
//参数为包名,是否从上次结果中继续搜索(无上次搜索则开始新的搜索),
//地址起点,数据,数据类型,搜索模式(0为完整搜索),搜索数据条数
//返回值为一个数组
Dim A = Sys.MemorySearch(当前应用包名, True,addr, tb, "i32",1,5)
TracePrint UBound(A)
For Each i in A
TracePrint i
Next
TracePrint "搜索地址为:"&A(0)&",耗时"&(TickCount()-t) //A(0)为搜索到的第一个地址
Dim 等级地址 = 地址相加(A(0), 116) //进行地址偏移(偏移116为等级地址)
TracePrint "偏移后得到等级地址"&等级地址
Dim t1 = TickCount()
TracePrint "当前等级为:"&Sys.MemoryRead(当前应用包名,等级地址, "i32") //读取地址的值
TracePrint "读地址耗时"&(TickCount()-t1)
TracePrint Sys.MemoryWrite(当前应用包名,等级地址,"100", "i32")
TracePrint "当前等级为:"&Sys.MemoryRead(当前应用包名,等级地址, "i32")
Function 地址相加(地址, 偏移) //简单封装一下偏移的函数
TracePrint Clng(地址)
Dim C = Clng(地址)+偏移
Dim D = Hex(C)
Dim E = "0x"&D
地址相加 = E
End Function

备注

数据类型的各个含义

名称 含义
i8 有符号8位
i16 有符号16位
i32 有符号32位
i64 有符号64位
u8 无符号8位
u16 无符号16位
u32 无符号32位
u64 无符号64位
f32 32位浮点数
f64 64位浮点数