| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2294 人关注过本帖
标题:[开源]读取游戏内存的数值!
只看楼主 加入收藏
pacocai
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1583
专家分:0
注 册:2007-3-12
收藏
 问题点数:0 回复次数:0 
[开源]读取游戏内存的数值!

弄了一个晚上,必竟对这些东西了解不是太深,从最初的时候想用指针解决读取的,但读出来的值一直都不准确,百度了一整个晚上找了很多的资料,最后还是用了API来读取内存的值。直接使用API中的ReadProcessMemory来读取某一个进程中的内存地址。我突然发现C#的资料实在太少了…………

主要实现代码:

const int Edx = 0x00A51178;//基址
const int EdxOffSet = 0x14C; //偏移量
int HP;
int _Process;
int pHandle;
const int PROCESS_ALL_ACCESS = 0x1F0FFF; //定义权限

#region 声明API
[DllImport("kernel32.dll")]
public static extern int ReadProcessMemory(int hProcess, int lpBaseAddress, out int lpBuffer, int nSize, int lpNumberOfBytesWritten);
[DllImport("kernel32.dll")]
public static extern int OpenProcess(int dwDesiredAccess, int bInheritHandle, int dwProcessId);
#endregion

System.Diagnostics.Process[] PinballProcessID = System.Diagnostics.Process.GetProcessesByName("TestGame"); //根据进程名获取进程ID

pHandle = PinballProcessID[0].Id; //读取进程ID
_Process = OpenProcess(PROCESS_ALL_ACCESS, 0, pHandle); //获取进程访问权

ReadProcessMemory(_Process, Edx, out HP, 4, 0); //读取基址值(仅限,基址,输出,大小)
ReadProcessMemory(_Process, HP + EdxOffSet, out HP, 4, 0); //读取内存值

差不多是这样了,说实话我对这东西还有些一知半解,不过大概能实现,今天晚上大概可以研究用WriteProcessMemory来修改内存的值了。

PS:现在这里有个问题我现在还没弄明白在这里就顺带请教大家一下,那就是我该怎样释放OpenProcess这些API资源呢?还有就是如果不调用API是否能直接读取某个进程的内存?

源:

3qFecb4E.rar (60.49 KB) [开源]读取游戏内存的数值!



注:在程序中有用到qf.controls这个控件,在论坛里有,大家可以找下。如果找不到的话……那再跟贴问我要吧。,现在读取的这个是个小程序,也是C#写的,我放在Debug目录下,文件名是TestGame.exe,现在读取的值就是这个东东的值。源还是保持以往的风格,简单绝无多余代码,该注释的地言都做了注释,易懂!自己给自己贴点金,其它的有问题再问吧……一不小心天就亮了,呵呵!我去早餐,然后觉觉去了。

写在最后的最后(灌下水)…………我突然发现我们坛子里的版主guoxhvip晚上5:40还在线,哈哈,又发现一个夜猫子。

[此贴子已经被作者于2007-9-16 7:43:15编辑过]

搜索更多相关主题的帖子: 内存 数值 游戏 开源 
2007-09-16 07:41
快速回复:[开源]读取游戏内存的数值!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.011709 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved