书香雅阁论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 805|回复: 0

【代码实现内存修改】

[复制链接]

384

主题

407

帖子

158万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1581367
发表于 2023-5-4 22:51:22|字数:1,530 | 显示全部楼层 |阅读模式
LV10 站长

双击下方地址栏中的地址,在上一课我们双击的是数值
1.png

我们可以得到的是当前地址为:test.exe+A0280,其实上图的左边也有(我用箭头指出来了),可以右键复制选中地址,这个test.exe叫模块地址,你们也可以称为基址A0280叫偏移(这是16进制的写法),也就是这里涉及到十六进制的运算,为什么要使用这种基址+偏移的写法我们后面再讲

  
子程序名返回值类型公开备 注
_按钮_修改_被单击  
变量名类 型静态数组备 注
程序名文本型  
模块名文本型  
进程pid整数型  
模块地址长整数型  
x32X32读写  
读取的数据文本型  
逻辑值逻辑型  
程序名 = “test.exe”  ' 运行的程序名
模块名 = “test.exe”
进程pid = 进程_名取ID (程序名)
判断 (进程pid = 0)
信息框 (“程序未运行”, 0, , )




模块地址 = x32.取模块地址 (进程pid, 模块名, 进制_十六到十 (“A0280”))
判断 (模块地址 = 0)
信息框 (“模块地址未找到,请检查模块名是否正确”, 0, , )




调试输出 (x32.读整数型 (模块地址))  ' 将读取的数据调试输出,这是为了演示模块的读取功能
逻辑值 = x32.写整数型 (模块地址, 666)  ' 666是修改为的数值
判断 (逻辑值 = )
信息框 (“修改成功”, 0, , )



信息框 (“修改失败”, 0, , )


i支持库列表   支持库注释   
spec特殊功能支持库


代码解释:
①:首先代码使用到了精易模块,几乎我们每一份源码都用到了
②:代码使用了内存读写模块,网上也有不少,我这里随便找了个
③:进程名模块名只是刚好一样,进程名就是软件运行时的名称,模块名以CE的为标准
④:取模块地址是精华,在上面我提到了test.exe+A0280是目标内存地址,而取模块地址得到的就是test.exe(模块名)10进制的值,什么叫10进制的值很多人可能不理解,不理解的看知识手册:004:【进制的理解】进制_十六到十 (“A0280”)得到的是偏移的10进制的结果
⑤:进程pid是什么,011:【进程名和进程id(pid)】
⑥:整份代码看上去非常简单,填空就行,那是因为模块别人都封装好了,调用就行,所以,学编程是要学理论,代码不难写,模块很多

修改程序的源码: 修改程序.e (939.79 KB, 下载次数: 153)
测试程序的源码:上一节已经上传了,编译的时候程序名要指定为test.exe否则代码里要修改程序名和模块名
内存读写模块: API读写模块.ec (31.05 KB, 下载次数: 121)


(点击返回课程目录https://shuxiangyage.net/forum.php?mod=viewthread&tid=1134
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|小黑屋|书香雅阁论坛 ( 湘ICP备17011672号-3 )

GMT+8, 2024-5-5 19:44 , Processed in 0.160363 second(s), 27 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表