我用游戏修改工具查到一数据的内存地址,用任务管理器看到PID
怎样读写内存数据,简而言之:
已知内存地址(0x0040320c)和PID(1234)
怎样用ReadProcessMemory和WriteProcessMemory读写内存
我的步骤是:
hp=OpenProcess(PROCESS_ALL_ACCESS,false,1234);
WriteProcessMemory()
WriteProcessMemory的参数怎么写?
需要VirtualAllocalEx吗?
怎样读写内存数据,简而言之:
已知内存地址(0x0040320c)和PID(1234)
怎样用ReadProcessMemory和WriteProcessMemory读写内存
我的步骤是:
hp=OpenProcess(PROCESS_ALL_ACCESS,false,1234);
WriteProcessMemory()
WriteProcessMemory的参数怎么写?
需要VirtualAllocalEx吗?
解决方案 »
- 同一个局域网的子网间的通信问题
- 求助:各位大哥,delete 一个类变量,为什么会有错误啊?谢谢!
- 关于单对象,多接口的问题
- CSDN现在怎么没人气了啊,问问题也没人答,好郁闷!!!!!
- 怎样把记录了一组字符ascii码的unsigned short类型的数组转化成对应的CString?
- BCG类库里面如何让CBCGPDockingControlBar不能通过鼠标改变控件大小?急啊!!!
- FlexGrid可否向MSGrid一样直接用一个_Recordset对象作为数据源?
- 关于BMP的,很简单!
- 我要在我的对话框上create 几个edit控件,create之后不显示出来怎么办
- 请问金山词霸的取词的窗口是怎么实现的?
- 组件里的SplashScreen,好象不能用真彩的图片是吗?
- 关于类的封装,类似全局函数,欢迎进入。
BOOL ModiProcessMemoryValue(MODI_POINT_PROPERTY *p)
{
DWORD rsize; return WriteProcessMemory(p->ph, p->Address , &(p->value),
p->vsize, &rsize);
}p->ph 进程句柄
p->Address 目标进程目标地址
p->value 需要写入目标地址的值
p->vsize 需要写入的内容大小
rsize 为写入的字节个数
http://nowcan.yeah.net
里面有VB下用这些函数的介绍
直接调用ReadProcessMemory和WriteProcessMemory函数实现进程间通讯通过调用ReadProcessMemory以及WriteProcessMemory函数用户可以按类似与Windows3.1的方法实现进程间通讯,在发送进程中分配一块内存存放数据,可以调用GlobalAlloc或者VirtualAlloc函数实现:
pApp->m_hGlobalHandle=GlobalAlloc(GMEM_SHARE,1024);
可以得到指针地址:
pApp->mpszGlobalHandlePtr=(LPSTR)GlobalLock
(pApp->m_hGlobalHandle);
在接收进程中要用到用户希望影响的进程的打开句柄。为了读写另一进程,应按如下方式调用OpenProcess函数:
HANDLE hTargetProcess=OpenProcess(
STANDARD_RIGHTS_REQUIRED|
PROCESS_VM_REDA|
PROCESS_VM_WRITE|
PROCESS_VM_OPERATION,//访问权限
FALSE,//继承关系
dwProcessID);//进程ID
为保证OpenProcess函数调用成功,用户所影响的进程必须由上述标志创建。
一旦用户获得一个进程的有效句柄,就可以调用ReadProcessMemory函数读取该进程的内存:
BOOL ReadProcessMemory(
HANDLE hProcess, // 进程指针
LPCVOID lpBaseAddress, // 数据块的首地址
LPVOID lpBuffer, // 读取数据所需缓冲区
DWORD cbRead, // 要读取的字节数
LPDWORD lpNumberOfBytesRead
);
使用同样的句柄也可以写入该进程的内存:
BOOL WriteProcessMemory(
HANDLE hProcess, // 进程指针
LPVOID lpBaseAddress, // 要写入的首地址
LPVOID lpBuffer, // 缓冲区地址
DWORD cbWrite, // 要写的字节数
LPDWORD lpNumberOfBytesWritten
);
如下所示是读写另一进程的共享内存中的数据:
ReadProcessMemory((HANDLE)hTargetProcess,
(LPSTR)lpsz,m_strGlobal.GetBuffer(_MAX_FIELD),
_MAX_FIELD,&cb);
WriteProcessMemory((HANDLE)hTargetProcess,
(LPSTR)lpsz,(LPSTR)STARS,
m_strGlobal.GetLength(),&cb);