程序进程地址查询(网上搜到的答案)
来源:互联网 发布:现在php不好找工作 编辑:程序博客网 时间:2024/04/28 00:45
我想写修改器
计划让用户选择要修改的程序(进程)
然后让用户输入数值(例如游戏里的角色血量)
然后用指针去扫描这个进程例如
void * p;
if (*((double*)p) == 用户输入的数)//也可能是别的数据类型
把所有符合的 数据的地址记下
然后用户故意让怪物打一下,使血量发生变化
再把变化后的血量输入,再扫描一次
这次扫描结果与上次扫描结果中,数据地址相同的保留
这样几次下来就能确定下血量这个数据的地址了
然后再用指针去修改
求怎么样找到一个进程在内存中的起始地址
用WIN32函数也可以
顺便说下它的结束地址
Module32First中MODULEENTRY32结构里modBaseAddr就是主程序模块的起始地址
追问:
求具体代码,示例一下,还有顺便说下求它的结束地址
追答:
最简单的方法是使用进程快照CreateToolhelp32Snapshot,列举所有的进程,然后枚举找到你所需要的进程,用Module32First获取其起始地址,然后用Module32Next获取下一个进程的基址也就是上一个进程的结束地址。
具体还是自己查一下MSDN,或者百度一下枚举所有进程的方法
看MSDN。。。。。。
CreateToolhelp32Snapshot
Header Declared in Tlhelp32.h.
Library Use Kernel32.lib.
DLL Requires Kernel32.dll.
这是win32函数。在 Kernel32.dll.
程序执行时在内存中有代码段和堆,动态数据在堆中存放,代码段中是没有你要的数据的。
基本上的过程是这样的:
1。枚举系统所有进程,找到你需要的进程id
2。对该进程进行快照,得到该进程的堆信息
3。在堆中查找你要的信息
//获取模块基址可以使用windows api函数GetModuleHandle
#include "stdafx.h"
#include "windows.h"
#include "process.h"
int main(int argc, char* argv[])
{ //获取模块基址
HMODULE hmou = ::GetModuleHandle(NULL);
long int addr = (long int)hmou;
printf("进程基址:0X%0X\n", addr);
system("pause");
return 0;
}
HMODULE GetModuleHandle (LPCTSTR lpModuleName);
▲功能说明:获取一个应用程序或动态链接库的模块句柄
▲参数说明:lpModuleName 模块名称
▲返回值:如执行成功成功,则返回模块句柄。零表示失败。通过GetLastError获得错误信息
如:
GetModuleHandle(NULL);
这将返回自身应用程序句柄
▲注意:
前提是:只有欲获取的模块已映射到调用该函数的进程内,才会正确得到模块句柄。常用模块映射函数:LoadLibrary(..)。
计划让用户选择要修改的程序(进程)
然后让用户输入数值(例如游戏里的角色血量)
然后用指针去扫描这个进程例如
void * p;
if (*((double*)p) == 用户输入的数)//也可能是别的数据类型
把所有符合的 数据的地址记下
然后用户故意让怪物打一下,使血量发生变化
再把变化后的血量输入,再扫描一次
这次扫描结果与上次扫描结果中,数据地址相同的保留
这样几次下来就能确定下血量这个数据的地址了
然后再用指针去修改
求怎么样找到一个进程在内存中的起始地址
用WIN32函数也可以
顺便说下它的结束地址
Module32First中MODULEENTRY32结构里modBaseAddr就是主程序模块的起始地址
追问:
求具体代码,示例一下,还有顺便说下求它的结束地址
追答:
最简单的方法是使用进程快照CreateToolhelp32Snapshot,列举所有的进程,然后枚举找到你所需要的进程,用Module32First获取其起始地址,然后用Module32Next获取下一个进程的基址也就是上一个进程的结束地址。
具体还是自己查一下MSDN,或者百度一下枚举所有进程的方法
看MSDN。。。。。。
CreateToolhelp32Snapshot
Header Declared in Tlhelp32.h.
Library Use Kernel32.lib.
DLL Requires Kernel32.dll.
这是win32函数。在 Kernel32.dll.
程序执行时在内存中有代码段和堆,动态数据在堆中存放,代码段中是没有你要的数据的。
基本上的过程是这样的:
1。枚举系统所有进程,找到你需要的进程id
2。对该进程进行快照,得到该进程的堆信息
3。在堆中查找你要的信息
//获取模块基址可以使用windows api函数GetModuleHandle
#include "stdafx.h"
#include "windows.h"
#include "process.h"
int main(int argc, char* argv[])
{ //获取模块基址
HMODULE hmou = ::GetModuleHandle(NULL);
long int addr = (long int)hmou;
printf("进程基址:0X%0X\n", addr);
system("pause");
return 0;
}
HMODULE GetModuleHandle (LPCTSTR lpModuleName);
▲功能说明:获取一个应用程序或动态链接库的模块句柄
▲参数说明:lpModuleName 模块名称
▲返回值:如执行成功成功,则返回模块句柄。零表示失败。通过GetLastError获得错误信息
如:
GetModuleHandle(NULL);
这将返回自身应用程序句柄
▲注意:
前提是:只有欲获取的模块已映射到调用该函数的进程内,才会正确得到模块句柄。常用模块映射函数:LoadLibrary(..)。
0 0
- 程序进程地址查询(网上搜到的答案)
- 今天笔试的一道题,在网上搜到的答案。
- 关于写socket遇到的错误,网上搜到的答案
- 网上免费的身份查询,快递单号查询服务器地址
- 网上maven 仓库查询地址
- 在网上搜到的
- 编写可以修改ip地址的android程序(一)网上参考资料
- 程序到进程的过程
- 进程 线性地址到物理地址的映射
- 根据网上搜到的代码,自己整理的jpeg解码程序
- 如何查询占用端口的程序进程
- 在网上搜到的题目
- 网上一道google笔试题的答案
- 网上的微软笔试试题和答案
- 网上搜的Eclipse插件更新地址列表
- 从进程到程序
- 从程序到进程
- 从程序到进程
- 图像平滑处理(归一化块滤波、高斯滤波、中值滤波、双边滤波)
- Android 项目 上传至 Jcenter.
- centos6下安装配置NFS
- Hibernate 4.3 SessionFactory
- 数据可视化工具
- 程序进程地址查询(网上搜到的答案)
- LeetCode Brust Ballons
- TV开发----控件如何置顶而不使用"bringToFront"
- SEO优化四个步骤,让网站排名靠前
- html格式化输出
- restful URI 匹配原理,它是咋构成的?
- Android UltimateRecyclerView优雅地使用RecyclerView
- js如何监听滚动条滚动事件,使得某个标签内容始终位于同一位置
- mongodb之shard集群 balance操作管理