HANDLE handle = OpenProcess(
id,//要被打开的进程的ID
TRUE,//当前要R/W的进程的子进程也可使用此HANDLE
PROCESS_VM_READ|//打开此句柄的进程可以Read内存
PROCESS_VM_WRITE)//打开此句柄的进程可以Write内存
DWORD dwWantRead = 1024,dwHaveRead;
LPBYTE lpBuf = new BYTE[dwWantRead];
BOOL ret =ReadProcessMemory(handle,
00A61305,//基址
lpBuf,
dwWantRead,
&dwHaveRead)
if(!ret)
{
//出错处理;
}
....//修改数据lpbuf
DWORD dwWantWrite= 1024,dwHaveWrite;
BOOL ret =WriteProcessMemory(handle,
00A61305,//基址
lpBuf,
dwWantWrite,
&dwHaveWrite)
if(!ret)
{
//出错处理;
}
delete []lpBuf;
Closehandle(handle)
试试看有问题MAIL给我
id,//要被打开的进程的ID
TRUE,//当前要R/W的进程的子进程也可使用此HANDLE
PROCESS_VM_READ|//打开此句柄的进程可以Read内存
PROCESS_VM_WRITE)//打开此句柄的进程可以Write内存
DWORD dwWantRead = 1024,dwHaveRead;
LPBYTE lpBuf = new BYTE[dwWantRead];
BOOL ret =ReadProcessMemory(handle,
00A61305,//基址
lpBuf,
dwWantRead,
&dwHaveRead)
if(!ret)
{
//出错处理;
}
....//修改数据lpbuf
DWORD dwWantWrite= 1024,dwHaveWrite;
BOOL ret =WriteProcessMemory(handle,
00A61305,//基址
lpBuf,
dwWantWrite,
&dwHaveWrite)
if(!ret)
{
//出错处理;
}
delete []lpBuf;
Closehandle(handle)
试试看有问题MAIL给我
00A61305,//基址
lpBuf,
dwWantWrite,
&dwHaveWrite)
这一行编译没通过
1.用Process32First和Process32Next可以玫举所有的进程(Window95/98实现了,WINNT4.0以及一下没有实现,Win2000实现了,如果是用NT4的话,就比较麻烦了,要用Performanance Data,太麻烦了,不说了。)
2.用VirtualQueryEx可以得到一个进程的内存的信息,如开始地址等(95/98/NT4/2000都实现了,就NT3.5没实现,要自己写,很麻烦的,不说了。)
3.然后用ReadProcessMemory和WriteProcessMemory就可以实现对某一进程内存的修改,这两个函数95/98/NT4/2000都实现了,读和写的方式是通过ReadPorcessMemory将内存块读到本进程中,就是在本进程上的一个拷贝,然后对这个拷贝执行各种操作,反正是在本进程中地一个拷贝(本进程中的一片内存),随你怎么操作啦,再将内存块用WriteProcessMemory写回去,就实现了对该内存数据的修改,象金山游侠、FPE那样的操作实际都是先对在本进程中的拷贝进行操作,然后将拷贝写回去。
操作别的进程的内存:
1.用Process32First和Process32Next可以玫举所有的进程(Window95/98实现了,WINNT4.0以及一下没有实现,Win2000实现了,如果是用NT4的话,就比较麻烦了,要用Performanance Data,太麻烦了,不说了。)
2.用VirtualQueryEx可以得到一个进程的内存的信息,如开始地址等(95/98/NT4/2000都实现了,就NT3.5没实现,要自己写,很麻烦的,不说了。)
3.然后用ReadProcessMemory和WriteProcessMemory就可以实现对某一进程内存的修改,这两个函数95/98/NT4/2000都实现了,读和写的方式是通过ReadPorcessMemory将内存块读到本进程中,就是在本进程上的一个拷贝,然后对这个拷贝执行各种操作,反正是在本进程中地一个拷贝(本进程中的一片内存),随你怎么操作啦,再将内存块用WriteProcessMemory写回去,就实现了对该内存数据的修改,象金山游侠、FPE那样的操作实际都是先对在本进程中的拷贝进行操作,然后将拷贝写回去。
1.用Process32First和Process32Next可以玫举所有的进程(Window95/98实现了,WINNT4.0以及一下没有实现,Win2000实现了,如果是用NT4的话,就比较麻烦了,要用Performanance Data,太麻烦了,不说了。)
2.用VirtualQueryEx可以得到一个进程的内存的信息,如开始地址等(95/98/NT4/2000都实现了,就NT3.5没实现,要自己写,很麻烦的,不说了。)
3.然后用ReadProcessMemory和WriteProcessMemory就可以实现对某一进程内存的修改,这两个函数95/98/NT4/2000都实现了,读和写的方式是通过ReadPorcessMemory将内存块读到本进程中,就是在本进程上的一个拷贝,然后对这个拷贝执行各种操作,反正是在本进程中地一个拷贝(本进程中的一片内存),随你怎么操作啦,再将内存块用WriteProcessMemory写回去,就实现了对该内存数据的修改,象金山游侠、FPE那样的操作实际都是先对在本进程中的拷贝进行操作,然后将拷贝写回去。
湮模疑!
苤萊試符珩晤祒祥徹 ReadProcessMemory 腔菴媼跺曹杅, "LPCVOID lpBaseAddress, // address to start reading"
扂蚚 ULONG, DWORD, 0x00A61305 飲岆船祥嗣佽祥夔蛌遙峈 const void * error C2664: 'ReadProcessMemory' : cannot convert parameter 2 from 'const int' to 'const void *'
Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast
Generating Code... 恀捲蠅猁睡酕!覜慾!
大家好!
小弟剛才也編譯不過 ReadProcessMemory 的第二個變數, "LPCVOID lpBaseAddress, // address to start reading"
我用 ULONG, DWORD, 0x00A61305 都是差不多說不能轉換為 const void * error C2664: 'ReadProcessMemory' : cannot convert parameter 2 from 'const int' to 'const void *'
Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast
Generating Code... 請問前輩們要如何做!感激!