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、

 

posted @ 2016-05-18 14:00  DebugSkill  阅读(168)  评论(0编辑  收藏  举报