windows平台下的进程内存修改

本文介绍了如何在Windows平台上实现进程内存修改,详细解析了相关API的使用,包括GetSystemInfo、OpenProcess等,并提供了自定义的内存管理及修改API的说明,通过这些API可以实现内存修改工具。
摘要由CSDN通过智能技术生成

Windows内存修改

你可能用过金山游侠,GameMaster8,Cheat Engine,那你有没有想过自己实现一个简易的内存修改工具?本文将介绍在Windows平台下实现一个简易内存修改工具的方法,只要你有一些windows内存管理机制的基本知识以及一定的c++编程能力,你就可以利用本文介绍的Windows内存管理API自己实现一个简易的内存修改工具。
本文将先介绍Windows的相关API,然后介绍下利用其实现内存修改工具的思路,最后介绍一个自己在windows api基础上封装的API(以下称内存管理及修改API或内存修改API),包括各API函数的说明以及如何通过对这套API的简单调用实现内存修改。
关于内存管理API以及简易的演示程序,代码较长,感兴趣的朋友可去https://github.com/jimth001/Windows-Memory-Modification.git 查看。

相关的windows API

1) GetSystemInfo

用来填充SYSTEM_INFO结构体信息,函数原型如下:


voidWINAPI GetSystemInfo(_Out_ LPSYSTEM_INFO lpSystemInfo)

lpSystemInfo:指向一个供函数返回信息的SYSTEM_INFO结构体。SYSTEM_INFO定义如下:

typedefstruct _SYSTEM_INFO {

union {

DWORD dwOemId;// Obsoletefield...do not use

struct {

       WORD wProcessorArchitecture;//处理器架构

WORD wReserved;

} DUMMYSTRUCTNAME;

} DUMMYUNIONNAME;

DWORD dwPageSize;//分页大小

LPVOID lpMinimumApplicationAddress;//最小寻址空间

LPVOID lpMaximumApplicationAddress;//最大寻址空间

DWORD_PTR dwActiveProcessorMask;//处理器掩码

DWORD dwNumberOfProcessors;//处理器数目

DWORD dwProcessorType;//处理器类型

DWORD dwAllocationGranularity;//虚拟内存空间的粒度

WORD wProcessorLevel;//处理器等级

WORD wProcessorRevision;//处理器版本

} SYSTEM_INFO, *LPSYSTEM_INFO;

2) GetPerformanceInfo

用来填充PERFORMANCE_INFORMATION结构体信息,用法类似于GetSystemInfo,比GetSystemInfo多一个参数,第二个参数是结构体的大小

PERFORMANCE_INFORMATION结构体定义如下:

typedef struct _PERFORMANCE_INFORMATION {

DWORD  cb;//该结构体大小,调用GetPerformanceInfo前要先将其初始化

SIZE_T CommitTotal;// 系统当前提交的页面总数

SIZE_T CommitLimit;// 系统可提交的页面总数

SIZE_T CommitPeak;// 系统历史提交页面峰值

SIZE_T PhysicalTotal;// 按页分配的总的物理内存

SIZE_T PhysicalAvailable;// 系统当前提交的页面总数

SIZE_T SystemCache;

SIZE_T KernelTotal;

SIZE_T KernelPaged;

SIZE_T KernelNonpaged;

SIZE_T PageSize;// The size of a page, in bytes.

DWORD  HandleCount;// The current number of open //handles.

DWORD ProcessCount;//

DWORD ThreadCount;//

}PERFORMANCE_INFORMATION, *PPERFORMANCE_INFORMATION;

3) CreateToolhelp32Snapshot

CreateToolhelp32Snapshot可以通过获取进程信息为指定的进程、进程使用的堆[HEAP]、模块[MODULE]、线程建立一个快照。

函数原型如下:

HANDLE WINAPI CreateToolhelp32Snapshot(DWORD dwFlags, //用来指定“快照”中需要返回的对象,可以是TH32CS_SNAPPROCESS(在快照中包含系统中所有的进程)等

DWORD th32ProcessID //一个进程ID号,用来指定要获取哪一个进程的快照,当获取系统进程列表或获取 当前进程快照时可以设为0

);

调用成功,返回快照的句柄,否则返回INVALID_HANDLE_VALUE

4) Process32First

process32First是一个进程获取函数,当我们利用函数CreateToolhelp32Snapshot()获得当前运行进程的快照后,我们可以利用process32First函数来获得第一个进程的句柄。

函数原型如下:


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值