∈怪有关问题→WriteProcessMemory写目标进程后导致XXXXX调用的内存XXXXXX不能为READ?
∈怪问题→WriteProcessMemory写目标进程后导致XXXXX调用的内存XXXXXX不能为READ???
如题,不是我写错了..
参数可以保证完全正确,并且写入地址并不是对方程序的代码地址,而是其数据地址,这些数据是经过测试的,完全正确。
在一个Timer1_Timer里调用下面这个函数(当不在Timer1_Timer里调用时不会出错,奇怪啊!!):
'将修改内存
Public Function SetData(ByVal lppid As Long, ByVal lpDestAddr As Long, lpSrcAddr() As Byte, Optional ByVal dtLen As Long = 4) As Boolean
On Error GoTo mErr
Dim lBytesReadWrite As Long
Dim pHandle As Long ' 储存进程句柄
' 使用进程标识符取得进程句柄
GamePid = lppid
pHandle = OpenProcess(PROCESS_ALL_ACCESS, False, lppid)
WriteProcessMemory pHandle, ByVal lpDestAddr, ByVal VarPtr(lpSrcAddr(0)), dtLen, 0&
' 关闭进程句柄
CloseHandle pHandle
SetData = True
mErr:
End Function
还请高手GG们帮忙我一下下。。。。。。。非常纳闷ING……
拿什么拯救你,我的大富翁。
------解决方案--------------------
XXXXX调用的内存XXXXXX不能为READ
看看地址
然后记下来,在他内存里找找这地址
------解决方案--------------------
暴风雨找的那个东东不知道是不是这个?
http://www.m5home.com/bbs/dispbbs.asp?boardID=10&ID=1344&page=1
我以前搞成了一个工程的,不过忘了是不是它....
------解决方案--------------------
先用VirtualProtectEx将目标内存页的权限改为可写,否则不能用WriteProcessMemory
------解决方案--------------------
WriteProcessMemory之前,
先Debug一下pHandle,看是不是0?
再Debug一下ubound(lpSrcAddr)+1与dtLen,看是不是dtLen超出了数据长度。
另外
ByVal VarPtr(lpSrcAddr(0))与Byref lpSrcAddr(0), 应该是一个效果,不过后者更可靠一些,你可换一下。
------解决方案--------------------
//仍然未解决啊
改成什么样子了
------解决方案--------------------
豆豆的代码,第一个是设置读写权限,第二个是还原。
如题,不是我写错了..
参数可以保证完全正确,并且写入地址并不是对方程序的代码地址,而是其数据地址,这些数据是经过测试的,完全正确。
在一个Timer1_Timer里调用下面这个函数(当不在Timer1_Timer里调用时不会出错,奇怪啊!!):
'将修改内存
Public Function SetData(ByVal lppid As Long, ByVal lpDestAddr As Long, lpSrcAddr() As Byte, Optional ByVal dtLen As Long = 4) As Boolean
On Error GoTo mErr
Dim lBytesReadWrite As Long
Dim pHandle As Long ' 储存进程句柄
' 使用进程标识符取得进程句柄
GamePid = lppid
pHandle = OpenProcess(PROCESS_ALL_ACCESS, False, lppid)
WriteProcessMemory pHandle, ByVal lpDestAddr, ByVal VarPtr(lpSrcAddr(0)), dtLen, 0&
' 关闭进程句柄
CloseHandle pHandle
SetData = True
mErr:
End Function
还请高手GG们帮忙我一下下。。。。。。。非常纳闷ING……
拿什么拯救你,我的大富翁。
------解决方案--------------------
XXXXX调用的内存XXXXXX不能为READ
看看地址
然后记下来,在他内存里找找这地址
------解决方案--------------------
暴风雨找的那个东东不知道是不是这个?
http://www.m5home.com/bbs/dispbbs.asp?boardID=10&ID=1344&page=1
我以前搞成了一个工程的,不过忘了是不是它....
------解决方案--------------------
先用VirtualProtectEx将目标内存页的权限改为可写,否则不能用WriteProcessMemory
------解决方案--------------------
WriteProcessMemory之前,
先Debug一下pHandle,看是不是0?
再Debug一下ubound(lpSrcAddr)+1与dtLen,看是不是dtLen超出了数据长度。
另外
ByVal VarPtr(lpSrcAddr(0))与Byref lpSrcAddr(0), 应该是一个效果,不过后者更可靠一些,你可换一下。
------解决方案--------------------
//仍然未解决啊
改成什么样子了
------解决方案--------------------
豆豆的代码,第一个是设置读写权限,第二个是还原。