为什么读不出内存中的数值,请高手指教
本帖最后由 pchome2000 于 2013-1-1 20:50 编辑代码错在那里,为什么读不出内存中的数值,图片右边的值 5% - for windows
$CurProcID = "2728";进程ID
$Handle = _MemoryOpen($CurProcID) ;获取内存读写句柄
$Base=0X005bbb30
$MEM = _MemoryRead($Base, $Handle)
Func _MemoryOpen($iv_Pid, $iv_DesiredAccess = 0x1F0FFF, $if_InheritHandle = 1)
If Not ProcessExists($iv_Pid) Then
SetError(1)
Return 0
EndIf
Local $ah_Handle =
If @error Then
SetError(2)
Return 0
EndIf
Local $av_OpenProcess = DllCall($ah_Handle, 'int', 'OpenProcess', 'int', $iv_DesiredAccess, 'int', $if_InheritHandle, 'int', $iv_Pid)
If @error Then
DllClose($ah_Handle)
SetError(3)
Return 0
EndIf
$ah_Handle = $av_OpenProcess
Return $ah_Handle
EndFunc;==>_MemoryOpen
Func _MemoryRead($iv_Address, $ah_Handle, $sv_Type = 'dword')
If Not IsArray($ah_Handle) Then
SetError(1)
Return 0
EndIf
Local $v_Buffer = DllStructCreate($sv_Type)
If @error Then
SetError(@error + 1)
Return 0
EndIf
DllCall("kernel32.dll", 'int', 'ReadProcessMemory', 'int', $ah_Handle, 'int', $iv_Address, 'ptr', DllStructGetPtr($v_Buffer), 'int', DllStructGetSize($v_Buffer), 'int', '')
If Not @error Then
Local $v_Value = DllStructGetData($v_Buffer, 1)
Return $v_Value
Else
SetError(6)
Return 0
EndIf
EndFunc;==>_MemoryRead 你确定PID是对的?? 同楼上,感觉进程ID用 “2728”表示有问题 pid值,是从任务管理器获取,所以不会有错。 内存地址是如何找到的?
页:
[1]