免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!
本次游戏没法给
内容参考于:微尘网络安全
本人写的内容纯属胡编乱造,全都是合成造假,仅仅只是为了娱乐,请不要盲目相信。
工具下载:
链接:https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd=6tw3
提取码:6tw3
复制这段内容后打开百度网盘手机App,操作更方便哦
上一个内容:31.第二阶段x86游戏实战2-遍历技能1
上一个内容里找到了一个返回值,本次接着继续
首先来到下图位置,也就是上一个内容最后的位置
然后现在通过断点进入下图红框的call里分析
然后打断点
然后触发断点
然后注意栈红框所示是返回值,这里要注意,按了F7之后就要找谁给这个地址里的值进行的修改,然后取消断点按F7
然后按完F7之后
然后会发现又是一个二叉树遍历,现在的公式[edi+0x18]+0xC
然后一路F8,下图红框所示eax的值是入参,然后在下图红框位置把入参给的内存地址里的值进行了修改,修改成了ecx的值
现在的公式[ecx+0x18]+0xC,然后开始找ecx的值哪来的,如下图红框ecx的值来自于ecx,现在的公式[[ecx]+0x18]+0xC
如下图ecx的值有来自于ebp+0xC的地址,注意它是lea指令取的地址,所以现在的公式[[ebp+0xC]+0x18]+0xC
通过断点确定ebp+0xC的值又来自于ecx,现在的公式[ecx+0x18]+0xC,为什么不是[[exc]+0x18]+0xC这个公式?因为在下图红框位置取了ecx的值了,在上图位置又取了ecx的地址,在使用时又有一句mov ecx,dword ptr[ecx],这又把ecx的值取了出来,所以实际上最终用的还是ecx的值,所以公式是[ecx+0x18]+0xC,这里有多余的代码,汇编代码都是编译器生成的所以有这种多余代码很正常
ecx的值来自于二叉树现在的公式[eax+0x18]+0xC
然后最终的公式[[[[ecx]+0x4]+0x8]+0x18]+0xC
通过dd指令加断点可以看出公式是正常的,然后接下来就要找二叉树的基址,也就是ecx的值哪来的
然后按减号(-号)继续往上反,来到下图位置,也就是按F7之前的位置,看看ecx的哪来的
ecx的值来自于esi+0x2A44,如下图红框现在的公式 [[[[esi+0x2A44]+0x4]+0x8]+0x18]+0xC
esi的值来自于edi+0x10,现在的公式 [[[[[edi+0x10]+0x2A44]+0x4]+0x8]+0x18]+0xC
edi的值来自于ecx,如下图红框,所以需要开始CTRL+F9了
然后在下图红框位置打断点(其实也不用打断点了,上一个内容里已经找到过了,打断点要注意一件事如果当前代码有多个位置调用会,比如走路也会调用技能显示名也会调用它可能会CTRL+F9到走路里,这样就错了,做好的办法就是通过上一个内容的硬件访问断点找)
然后来到了下图位置
通过断点确定ecx来源
然后现在基址可以说是找到了,然后现在的公式[[[[[[[[0x105F008]+0x60]+0x148]+0x10]+0x2A44]+0x4]+0x8]+0x18]+0xC
通过dd指令验证,可以正常得到技能名字,现在就找到了技能列表
计算偏移本次Game.exe的基址是AC0000,偏移是0x59F008