精易论坛

标题: 偏移表达式内存读取 [打印本页]

作者: 你是我的小星星    时间: 2019-7-2 14:23
标题: 偏移表达式内存读取
  
子程序名返回值类型公开备 注
ReadInt整数型 可以是绝对地址或者偏移地址,不支持带有乘除的内存偏移地址
参数名类 型参考可空数组备 注
addr文本型
type整数型0为32位1为16位2为8位
如果真 (GetOffsetMemoryAdd (addr) = 0)
返回 (0)
如果真 (是否为空 (type))
type = 0
判断 (type = 0)
返回 (十六转十 (取文本右边 (取十六进制文本 (指针到整数 (GetOffsetMemoryAdd (addr))), 8)))
判断 (type = 1)
返回 (十六转十 (取文本右边 (取十六进制文本 (指针到整数 (GetOffsetMemoryAdd (addr))), 4)))
判断 (type = 2)
返回 (十六转十 (取文本右边 (取十六进制文本 (指针到整数 (GetOffsetMemoryAdd (addr))), 2)))
返回 (0)
' ‘调试输出 (“单字节”, 十六转十 (取文本右边 (十六进制文本, 2)))
' ‘调试输出 (“双字节”, 十六转十 (取文本右边 (十六进制文本, 4)))
' ‘调试输出 (“四字节”, 十六转十 (取文本右边 (十六进制文本, 8)))
子程序名返回值类型公开备 注
ReadStr文本型 
参数名类 型参考可空数组备 注
addr文本型可以是绝对地址或者偏移地址,不支持带有乘除的内存偏移地址
如果真 (GetOffsetMemoryAdd (addr) = 0)
返回 (“”)
返回 (指针到文本 (GetOffsetMemoryAdd (addr)))
子程序名返回值类型公开备 注
Readfloat小数型 可以是绝对地址或者偏移地址,不支持带有乘除的内存偏移地址
参数名类 型参考可空数组备 注
addr文本型
如果真 (GetOffsetMemoryAdd (addr) = 0)
返回 (0)
返回 (指针到小数 (GetOffsetMemoryAdd (addr)))
子程序名返回值类型公开备 注
ReadDoubleFloat双精度小数型 可以是绝对地址或者偏移地址,不支持带有乘除的内存偏移地址
参数名类 型参考可空数组备 注
addr文本型
如果真 (GetOffsetMemoryAdd (addr) = 0)
返回 (0)
返回 (指针到双精度小数 (GetOffsetMemoryAdd (addr)))
子程序名返回值类型公开备 注
ReadBitS字节集 可以是绝对地址或者偏移地址,不支持带有乘除的内存偏移地址
参数名类 型参考可空数组备 注
addr文本型
如果真 (GetOffsetMemoryAdd (addr) = 0)
返回 (到字节集 (0))
返回 (指针到字节集 (GetOffsetMemoryAdd (addr), ))
子程序名返回值类型公开备 注
GetOffsetMemoryAdd整数型 Calculate with offset memory address
参数名类 型参考可空数组备 注
addr文本型
变量名类 型静态数组备 注
左括号整数型 
右括号整数型 
判断符号文本型 
变量i整数型 
偏移计数整数型 
带符号的中括号内的内存文本文本型 
不带符号的中括号内的内存文本文本型 
中括号内的内存文本数组文本型0
中括号内的内存整数数组整数型0
中括号内的内存文本数组序号整数型 
ret整数型 
' 基址部分
循环判断首 ()
清除数组 (中括号内的内存文本数组)
清除数组 (中括号内的内存整数数组)
左括号 = 倒找文本 (addr, “[”, , )
右括号 = 寻找文本 (addr, “]”, , )
判断 (左括号 ≠ -1 右括号 ≠ -1)
带符号的中括号内的内存文本 = 取文本中间 (addr, 左括号 + 1, 右括号 - 左括号 - 1)
不带符号的中括号内的内存文本 = 子文本替换 (带符号的中括号内的内存文本, “+”, “$”, , , )
不带符号的中括号内的内存文本 = 子文本替换 (不带符号的中括号内的内存文本, “-”, “$”, , , )
判断 (左括号 = -1 右括号 ≠ -1)
' 调试输出 (“警告:括号不匹配,缺少左括号”)
返回 (0)
判断 (左括号 ≠ -1 右括号 = -1)
' 调试输出 (“警告:括号不匹配,缺少右括号”)
返回 (0)
带符号的中括号内的内存文本 = addr
不带符号的中括号内的内存文本 = 子文本替换 (带符号的中括号内的内存文本, “+”, “$”, , , )
不带符号的中括号内的内存文本 = 子文本替换 (不带符号的中括号内的内存文本, “-”, “$”, , , )
中括号内的内存文本数组 = 分割文本 (不带符号的中括号内的内存文本, “$”, )
' 调试输出 (“中括号内的内存文本数组”, 中括号内的内存文本数组)
计次循环首 (取数组成员数 (中括号内的内存文本数组), 变量i)
如果 (中括号内的内存文本数组 [变量i]“”)
加入成员 (中括号内的内存整数数组, 0)
加入成员 (中括号内的内存整数数组, 十六转十 (中括号内的内存文本数组 [变量i]))

计次循环尾 ()
' 调试输出 (“中括号内的内存整数数组”, 中括号内的内存整数数组)
判断循环首 (变量i ≤ 取文本长度 (带符号的中括号内的内存文本))
判断符号 = 取文本中间 (带符号的中括号内的内存文本, 变量i, 1)
判断 (判断符号 = “+”)
中括号内的内存整数数组 [1] = 中括号内的内存整数数组 [1] + 中括号内的内存整数数组 [2]
删除成员 (中括号内的内存整数数组, 2, )
' 调试输出 (“中括号内的内存整数数组”, 中括号内的内存整数数组)
判断 (判断符号 = “-”)
中括号内的内存整数数组 [1] = 中括号内的内存整数数组 [1] - 中括号内的内存整数数组 [2]
删除成员 (中括号内的内存整数数组, 2, )
' 调试输出 (“中括号内的内存整数数组”, 中括号内的内存整数数组)


变量i = 变量i + 1
判断循环尾 ()
' ‘调试输出 (“当前内存地址:” + 到文本 (中括号内的内存整数数组 [1]))
如果 (左括号 ≠ -1 右括号 ≠ -1)
ret = 指针到整数 (中括号内的内存整数数组 [1])
' ret = 假的指针到整数 (中括号内的内存整数数组 [1])
如果真 (ret = 0)
' ‘调试输出 (“读取地址失败”)
返回 (0)

判断 (偏移计数 = 0)
' ‘调试输出 (“基址取得地址数据:” + 到文本 (ret))
' ‘调试输出 (“第” + 到文本 (偏移计数) + “偏移地址取得地址数据:” + 到文本 (ret))
addr = 取文本左边 (addr, 左括号 - 1)取十六进制文本 (ret)取文本右边 (addr, 取文本长度 (addr) - 右括号)
' 调试输出 (“得到新的地址”, addr)
' ‘调试输出 (“第” + 到文本 (偏移计数) + “偏移地址的地址数据:” + 到文本 (中括号内的内存整数数组 [1]))
返回 (中括号内的内存整数数组 [1])

偏移计数 = 偏移计数 + 1
循环判断尾 ()
返回 (0)
子程序名返回值类型公开备 注
十六转十整数型 
参数名类 型参考可空数组备 注
十六进制文本文本型
变量名类 型静态数组备 注
i整数型 
十进制整数型 
计次循环首 (取文本长度 (十六进制文本), i)
十进制 = 十进制 × 16 + 寻找文本 (“0123456789ABCDEF”, 取文本中间 (十六进制文本, i, 1), , ) - 1
计次循环尾 ()
返回 (十进制)

1.bmp (765.33 KB, 下载次数: 0)

1.bmp

作者: 你是我的小星星    时间: 2019-7-2 14:27
说明:在写的时候是本程序内部调试的,所以用了“指针到整数”这个函数,如果是读取其他程序的内存,可以用精益模块的“类_内存”这个类中的读整数函数




欢迎光临 精易论坛 (https://125.confly.eu.org/) Powered by Discuz! X3.4