跳到主要内容

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

🎯功能

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

📜语法

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

📥参数

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

📤返回

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

💡示例

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位
f3232位浮点数
f6464位浮点数