(这是边跟代码边记录下来的,也没有整理,可能有些不对的地方请见谅,比如在末尾...,但结果是预期的结果。需要详细说明的请留言。。。只有这句是后来加的)
目的:
先用MHS软件找到,某个怪物X坐标的动态内存地址(实际查找能找到到了自己,NPC,怪物的坐标信息),看看是哪个语句写入了这个地址。再在OD中跟踪这个地址的数据的传递来源,一直找到一个固定的内存地址,根据传递路径得到X坐标的计算公式。 [常量地址]-->eax-->ebx-->ebp-->....-->[eax]=[动态地址]
1、进入游戏,这个 鹿 的X坐标发送变化的时候用MHS进行搜索,查看 改写给该地址的 汇编 语句
扫描到的地址是: 086FF06C,写入该地址的反汇编语句是:00618C3D MOV DW PTR [EBX+2AC],EAX
2,用OD附加游戏进程
同时
正好是一个怪物的x坐标。
那么需要向上找EBX的来源了。
EBX<--EAX
和前一行的代码相距不远也到了这个call(可能是的)的头部了,
,这像个CALL函数,CALL.00618C08
F2,F2,CTRL+F9跳出去
EAX<--EBX 向上找EBX。
EBX<--EAX,再找eax,向上到达了代码片的头部了,跳出去也只有一个CALL,再跳出去。
eax<--esi,一直找到代码段的头部,F2断下,ESI的值由EBP传来。
ESI<--[EBP-4]<--EAX,到达代码段头部,需要出去跟EAX
EAX<--ESI,不断的向上观察ESI是否会变。
ESI<--EAX<--EDI<--[EAX]<--[EBP-04]+0x9C,通常EBP在CALL的头部用MOV EBP,ESP赋值,果然...
不过这下面还有一句<混在几个蓝色的一起好容易漏看到>
[EBP-4]<--EAX,这里像是一个CALL.5CAAA4,需要跳出去找EAX来源
但跳出去,不在CALL.5CAAA4下面。因我不太会用OD,只有不断跳,一直跟到CALL.5CAAA4下
EAX<--[006ACB58],到这里就结束了。可以列个计算式了。
ox6ACB58]]+0x40]+0x8] 是周围怪物的个数(包含自己)
ox6ACB58]]+0x40]+0x4]+4xi] 为周围怪物的地址信息,包含了名称代码,坐标 ,朝向等等(i==0时 就是自己的信息结构)