zuiyi 发表于 2009-8-15 07:51:18

为啥我读出的游戏里的血量值总是零

本帖最后由 zuiyi 于 2009-8-15 08:06 编辑

实在搞不懂了,基址和偏移都是最新的,但为什么读出的血总是零啊?我用For遍历时,也无法读出一个和游戏里实际血量相同的偏移.还有,用_MemoryRead读出的血量值是什么数据类型的长度又是多少?望高手看看下面的代码~~

#include<Memory.au3>
$Base=0x0097B55C
$HPofset=0x25c
$CurProcID=WinGetProcess("Element Client")
$Handle=_MemoryOpen($CurProcID)
$HP=_MemoryRead("0x"&Hex($Base+$HPofset),$Handle)
MsgBox(0,"",$HP)

补充下,其它的偏移是
$Address = 0x0097B55C
$ofset = 0x24

KLU3K 发表于 2009-8-15 09:52:47

完美世界?

lynfr8 发表于 2009-8-15 14:22:47

没写外挂的经验
估计写外挂的都忙着挣钱去了
楼主还是得多多自行研究啊

zuiyi 发表于 2009-8-15 16:34:45

2# KLU3K

是武林外传的基址,完美的游戏差不多吧~~

zuiyi 发表于 2009-8-15 17:05:35

$Handle=_MemoryOpen($CurProcID)
是不是我这里出错了?我用MsgBox(0,"",$Handle)时得到空的窗口,没任何数据,但$Handle<>0,因为判断时不提示出错

zuiyi 发表于 2009-8-16 05:58:51

#include<Memory.au3>
$Address=0x0097B55C
$offset=0x24
$HPofset=0x25c

$CurProcID=WinGetProcess("Element")
$Handle=_MemoryOpen($CurProcID)
If $Handle=0 then
   MsgBox(4096,"错误提示","打开游戏内存错误。")
   Exit
EndIf

$one_Address=_MemoryRead($Address,$Handle)
$two_Address=_MemoryRead("0x"&Hex($one_Address+$offset),$Handle)
$HP=_MemoryRead("0x"&Hex($two_Address+$HPofset),$Handle)

MsgBox(0,"",$HP)

这个也不对,高手在哪啊....

四海皆狂龙 发表于 2009-8-16 06:56:15

呵呵!高手都去挣钱去了。

zuiyi 发表于 2009-8-18 04:14:03

再小顶下,知道的高手HELP~

pusofalse 发表于 2009-8-18 08:52:18

可能的原因:
1, 没有权限访问进程。
2, 内存地址错误。
3, 函数内部存在错误或者函数调用时存在错误。
4, ... ...
从你能想到的各个方面出发,一一排查吧... - - |||

leacks 发表于 2009-8-26 17:55:37

没有权限访问进程
假使有防外挂机制

sxd 发表于 2009-9-1 03:03:06

先声明 我不是高手

第一段是不对的 不是read(基址+偏移)
第二段用法是对(如果有2级偏移的话)地址也对的话 那我就不知道了 自己排查下或者可以看看别人代码
去 断点 广海 请人发一小段你学习下是不是格式错了 还是地址错了
页: [1]
查看完整版本: 为啥我读出的游戏里的血量值总是零