【代码实现内存修改】
本帖最后由 书香 于 2024-2-10 04:47 编辑双击下方地址栏中的地址,在上一课我们双击的是数值
我们可以得到的是当前地址为:test.exe+A0280,其实上图的左边也有(我用箭头指出来了),可以右键复制选中地址,这个test.exe叫模块地址,你们也可以称为基址,A0280叫偏移(这是16进制的写法),也就是这里涉及到十六进制的运算,为什么要使用这种基址+偏移的写法我们后面再讲
.版本 2
.支持库 spec
.子程序 _按钮_修改_被单击
.局部变量 程序名, 文本型
.局部变量 模块名, 文本型
.局部变量 进程pid, 整数型
.局部变量 模块地址, 长整数型
.局部变量 x32, X32读写
.局部变量 读取的数据, 文本型
.局部变量 逻辑值, 逻辑型
程序名 = “test.exe”' 运行的程序名
模块名 = “test.exe”
进程pid = 进程_名取ID (程序名)
.判断开始 (进程pid = 0)
信息框 (“程序未运行”, 0, , )
.默认
.判断结束
模块地址 = x32.取模块地址 (进程pid, 模块名, 进制_十六到十 (“A0280”))
.判断开始 (模块地址 = 0)
信息框 (“模块地址未找到,请检查模块名是否正确”, 0, , )
.默认
.判断结束
调试输出 (x32.读整数型 (模块地址))' 将读取的数据调试输出,这是为了演示模块的读取功能
逻辑值 = x32.写整数型 (模块地址, 666)' 666是修改为的数值
.判断开始 (逻辑值 = 真)
信息框 (“修改成功”, 0, , )
.默认
信息框 (“修改失败”, 0, , )
.判断结束
代码解释:
①:首先代码使用到了精易模块,几乎我们每一份源码都用到了
②:代码使用了内存读写模块,网上也有不少,我这里随便找了个
③:进程名和模块名只是刚好一样,进程名就是软件运行时的名称,模块名以CE的为标准
④:取模块地址是精华,在上面我提到了test.exe+A0280是目标内存地址,而取模块地址得到的就是test.exe(模块名)的10进制的值,什么叫10进制的值很多人可能不理解,不理解的看知识手册:004: 【进制的理解】 ,进制_十六到十 (“A0280”)得到的是偏移的10进制的结果
⑤:进程pid是什么,011:【进程名和进程id(pid)】
⑥:整份代码看上去非常简单,填空就行,那是因为模块别人都封装好了,调用就行,所以,学编程是要学理论,代码不难写,模块很多
测试程序的源码:上一节已经上传了,编译的时候程序名要指定为test.exe,否则代码里要修改程序名和模块名
修改程序的源码+内存读写模块:
(点击返回课程目录:https://www.52hb.com/thread-58658-1-1.html) 感谢分享,学习 感谢分享,学习 感谢分享 学习 我把【进制_十六到十】改成【十六进制】为啥程序也能正常使用
页:
[1]