TC官方合作论坛

 找回密码
 立即注册
查看: 492|回复: 12
打印 上一主题 下一主题

[已解决] 动态库调用ReadProcessMemory 求高手帮帮忙

[复制链接]
跳转到指定楼层
楼主
发表于 2016-8-20 00:33:14 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

马上加入TC

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
动态库调用ReadProcessMemory 求高手帮帮忙
回复

使用道具 举报

9#
发表于 2016-8-24 00:20:51 | 只看该作者
另外一点 就是你参数写错了
//座位号内存基址"00111654"
这个是十六进制的,你写十进制的。
回复 支持 反对

使用道具 举报

13#
 楼主| 发表于 2016-8-28 10:11:03 | 只看该作者
dear 发表于 2016-8-28 01:11
这个跟我之前跟你说的 没多大区别,就一条读进程内存。

byte chessdata[11][19]  我是不知道这个数组如何在TC6.1里面写出
回复 支持 反对

使用道具 举报

12#
发表于 2016-8-28 01:11:26 | 只看该作者
jandan520 发表于 2016-8-26 21:24
byte chessdata[11][19]                DWORD byread;
        LPCVOID pbase=(LPCVOID)0x0012A508; ...

这个跟我之前跟你说的 没多大区别,就一条读进程内存。
回复 支持 反对

使用道具 举报

11#
 楼主| 发表于 2016-8-26 21:24:46 | 只看该作者

    byte chessdata[11][19]                DWORD byread;
        LPCVOID pbase=(LPCVOID)0x0012A508; //棋盘数据基址
        LPVOID  nbuffer=(LPVOID)&chessdata;    //存放棋盘数据
        ::ReadProcessMemory(processH,pbase,nbuffer,11*19,&byread);


这是C++的源代码 请高手帮帮忙转换TC代码谢谢
回复 支持 反对

使用道具 举报

10#
 楼主| 发表于 2016-8-24 23:30:51 | 只看该作者
dear 发表于 2016-8-24 00:15
0表示读取内存失败。
你确定是没保护的话,那就是你进程句柄弄错了。

谢谢高手耐心帮忙 原来是我把这个十六进制的,当成十进制了
回复 支持 反对

使用道具 举报

8#
发表于 2016-8-24 00:15:56 | 只看该作者
jandan520 发表于 2016-8-24 00:07
功能 内存读取操作()
    //座位号内存基址"00111654"
    变量 进程ID

0表示读取内存失败。
你确定是没保护的话,那就是你进程句柄弄错了。
回复 支持 反对

使用道具 举报

7#
 楼主| 发表于 2016-8-24 00:07:25 | 只看该作者
本帖最后由 jandan520 于 2016-8-24 00:11 编辑


功能 内存读取操作()
    //座位号内存基址"00111654"
    变量 进程ID
    变量 进程句柄
    变量 座位号
    变量 返回内存地址上的内容
    变量 实际读取的内容
    变量 内存基址 = 00111654
    窗口句柄 = 窗口查找("QQ游戏 - 连连看角色版","")
    动态库调用("user32.dll","long","GetWindowThreadProcessId","long",窗口句柄,"plong",进程ID)
    进程句柄 = 动态库调用("Kernel32.dll","long","OpenProcess","long",2035711,"long",假,"long",进程ID)
    调试输出(窗口句柄)
    调试输出(进程ID)
    //进程句柄 = 进程获取句柄("QQ游戏 - 连连看角色版")
    调试输出(进程句柄)
    调试输出(dllcall("kernel32.dll","long","ReadProcessMemory","long",进程句柄,"long",00111654,"plong",返回内存地址上的内容,"long",1,"plong",实际读取的内容))//这行调试1 说明成功了。0说明失败了
    // 座位号 = 动态库调用("Kernel32.dll","long","ReadProcessMemory","long",进程句柄,"long",内存基址,"plong",内存地址上的内容,"long",4,"plong",实际读取的内容)
    //编辑框设置文本("编辑框2",座位号)
    //调试输出(座位号)
    调试输出(返回内存地址上的内容)//你要的内容
    调试输出(实际读取的内容)
结束





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 支持 反对

使用道具 举报

6#
发表于 2016-8-22 11:51:45 | 只看该作者
  1. var 进程句柄=?? //这个你需要自己添,一般TC的 进程信息 这个函数就可以用窗口句柄获取到。要2次调用
  2. var 想要读取的内存地址=#444444 //16进制的地址。看着改
  3. var 返回内存地址上的内容
  4. var 要读取的长度=1 //0~5之间的数字 长度就是1咯。
  5. var 返回实际读取的内容
  6. 调试输出(dllcall("kernel32.dll","long","ReadProcessMemory","long",进程句柄,"long",想要读取的内存地址,"plong",返回内存地址上的内容,"long",要读取的长度,"plong",返回实际读取的内容))//这行调试1 说明成功了。0说明失败了
  7. 调试输出(返回内存地址上的内容)//你要的内容
  8. 调试输出(返回实际读取的内容)//内容的长度
复制代码
回复 支持 反对

使用道具 举报

5#
 楼主| 发表于 2016-8-21 23:07:35 | 只看该作者
dear 发表于 2016-8-20 23:46
读什么类型的数据?长度多少?

就是 0到5的数字
回复 支持 反对

使用道具 举报

*滑动验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /2 下一条

关闭

小黑屋|TC官方合作论坛 (苏ICP备18043773号

GMT+8, 2025-9-20 09:25 , Processed in 0.124807 second(s), 25 queries .

Powered by 海安天坑软件科技有限公司

© 2001-2013 Comsenz Inc.

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