想用au3借助winapi读取某个程序某个基址的数值,为什么总是出来数值为 0 ? 代码如下,对windows编程不熟悉。寻求知情者解答,谢谢。 ----------------------------------------------------- #include "WinAPI.au3" local $pro = "***.exe" local $pid = ProcessExists($pro) Local $addr = 0x00F0E610 ; 通过Cheat Engine找出某个数值的内存基址00F0E610,前面已经加上 0x Local $pBaseAddress = hex($addr) ; 转换成16进制 local $pBuffer = hex(16) ;偏移 = 数据缓冲尺寸 $iSize = 160 ;160自己填的,这个怎么知道是多少呢? $iRead = 0 ; 这是什么? $a = _WinAPI_ReadProcessMemory($pid, $pBaseAddress, $pBuffer, $iSize, $iRead) MsgBox(0,"aa",$pid & " " & $addr & " " & $pBaseAddress & " | "& $a) MsgBox(0,0,@error)
假如我要将CheatEngine自带的帮助程序 Tutorial-i386.exe 中step2的数值从内存中读取出来, 内存地址已经用 CE查到为 000B0474 修改了网上一个博友的脚本,发现读出的数值为1,显然不对。 因为对于win的内存不熟悉,不知道原因何在? 代码如下: ---------------------------------------------------------- #include <WinAPI.au3> local $pro = "Tutorial-i386.exe" Global $adress_Hint = "0x000B0474" ;修改地址,用金山游侠确定 ^_^ $vBuffer = DllStructCreate("byte var2") ;新建数据 DllStructSetData($vBuffer, "var2", 199) ;赋值为 99 $p_Buffer = DllStructGetPtr($vBuffer) ;返回地址指针 $i_Size = DllStructGetSize($vBuffer) ;返回数据大小 $i_Pid = ProcessExists($pro) ;寻找主程序,取得句柄以便操作 If $i_Pid <> 0 Then $open = _WinAPI_OpenProcess("0x1F0FFF", False, $i_Pid) ;打开进程,"0x1F0FFF"为常数 _WinAPI_WriteProcessMemory($open, $adress_Hint, $p_Buffer, $i_Size, 11111) ;修改内存 If @error Then MsgBox(1, "Error1", "writeerror") EndIf $kk = _WinAPI_ReadProcessMemory($open, $adress_Hint, $p_Buffer, $i_Size, 0) ; If @error Then MsgBox(1, "Error2", "readerror") EndIf ProcessClose($open) ;关闭修改进程 If @error Then MsgBox(1, "Error3", "processerror") EndIf Else MsgBox(0, "Tip", "请先运行程序") EndIf MsgBox(1, "内存值:", $kk)