YJX_rxjh_21_3.2.3
对上节课找到的几个疑似走路CALL 逐一进行测试,确定真正的走路CALL
【00:20】有可能几个CALL都是 走路/寻路
【04:00】上一节课 和 这一节课,游戏应该是已经 重启了,然后这里的 ECX居然真的是没有变化(还是0x065FEC8C)
【04:55】ZC: 貌似ESI的值(源地址) 也没变化...
【05:35】ZC: EAX的值(0x0012CD18)(目的地址) 也没变化...
【06:13】用CE搜索 当前坐标值
【07:30】结果 扫没了...(ZC: 这是什么原因?)
【07:37】CE重新扫描一下,范围扩大(CE选项 “内存扫描选项” 由“32字节”改为选择“全部”)
【08:25】又扫没了...
【08:35】修改 扫描浮点数的选项 “简化”改成选择“完整(默认)”
【08:43】或者我们可以 不扫x坐标 改扫y坐标
【08:51】还可以通过 OD里面我们找到的内存处的数据 得到精确的数值(16进制)
【09:40】CE搜索精确的值的话,这样弄“-43.71941”,“精确数值”,“浮点数”,“完整(默认)”
【11:15】搜出来了,还搜出基址来了 【11:27】人物走两步过程中,观察CE中的数值的变化,他 推测出 第2个地址是目的坐标地址 【11:35】我们之前也是 根据这样来回溯的(ZC: 是这样吗?记不清了...) 【12:00】这个目的地址 它也是通过 065FEC8C偏移14DC 更新的 (ZC: 是这样吗?)
【10:50】065FEC8C偏移1F78==> 源地址,065FEC8C偏移14DC==>目的地址
ZC: 我记得上一课,这两个偏移指向的是同一个地址嘛...
【15:14】数组地址的汇编操作是这样:“LEA ECX, zhy”
ZC: 用LEA和MOV在这里又和区别?貌似这里 应该使用MOV而非LEA吧?
【17:13】这里 写代码时,h坐标并不知道 【17:25】看了OD中游戏里面的h坐标之后,随便去一个数值,应该没有什么影响
【18:15】代码调用了,游戏中角色没动 ==> 说明这个CALL可能就不是 走路CALL
【18:52】最后一个测试CALL 角色走路时 被调用的地方。分析参数 【19:25】下个断,看看猜测的参数意义 是否正确
这个CALL比较复杂,参数是一个结构
【21:30】开始写代码
【22:30】这里 EBX的值 也是065FEC8C ... 【22:40】是同一个基址 (ZC: 这里,这个值是否是基址 还没有直接的证据证明吧?)
【25:47】游戏出错了...
【26:30】修改代码,ECX的值
【26:25】语句“mov ecx,0x065FEC8C” 改成“mov ecx,ebx” 效率高一些 (ZC: 为什么? 使用寄存器比使用立即数效率高?立即数需要从内存中取?)
【26:58】游戏 还是 出错
【27:26】代码 改了这里
【28:06】游戏 还是 出错
【28:40】CALL 的地址 还是用的旧的
【29:16】ECX的值,应该设置成这个常量
【29:42】游戏 还是 出错
【30:07】VC6 内联汇编语句bug “mov ecx, 0x1471390”要拆开写
【30:40】游戏没有出错,但是角色没有移动,当我们手动点击 右键 的时候 角色才开始走路,只是执行我们的测试代码的话 角色是不会移动的
【31:10】把 2个CALL 放在一起调用 (ZC: 这样子弄,我倒是没有想到过...)
【31:20】游戏报错
1、
2、