美文网首页
通过当前血找二叉树(二)

通过当前血找二叉树(二)

作者: DF_Sky | 来源:发表于2019-06-25 20:09 被阅读0次

上一节我们找到了二叉树遍历的地方
这节我们详细来分析下这个二叉树
我们可以在头部下断 然后单步调试 一步步走 分析
0155BD87 8B71 48 mov esi,dword ptr ds:[ecx+0x48] ; ecx=[0x1BF8C28]
0155BD8A 8BCE mov ecx,esi
0155BD8C 8B46 04 mov eax,dword ptr ds:[esi+0x4]
0155BD8F 8078 0D 00 cmp byte ptr ds:[eax+0xD],0x0 这边把[eax+d]和0比较 其实这里是判断是否遍历完了
0155BD93 75 14 jnz short Game.0155BDA9 如果不相等就跳到0155BDA9
0155BD95 3950 10 cmp dword ptr ds:[eax+0x10],edx 这个是edx是对象ID 是push进来的第二个参数 这个不懂可以先放 我们主要分析二叉树结构 如果我们是通过遍历我们自己人物的信息 如血 跟进来的 那这个edx就是我们人物的ID
0155BD98 7D 05 jge short Game.0155BD9F 如果[eax+0x10]>=edx 就跳 否则就继续往下执行 也就是遍历右树 为什么?
我们发现 他是在和我们传的参数 对象ID比较 最终这个函数是要返回我们传的这个ID的对象出去的 这个eax+10本身也是一个对象的ID eax即表示某个对象
也就是说 他在这个树里面 找我们的传进来的对象是否存在 如果存在 最终会返回出去 否则就返回0
我们再分析 为什么当前对象ID大于我们传进来的ID就不跳 继续往下执行 遍历右树
我们可以这样猜想 说明这个树存放数据是有一定规律的

image.png
我简单画了一张草图 将就看吧 哈哈
假设我们根节点5 这时候来了第二个对象他是2 发现比5小因此存放在左树
这时候 又来了第三个对象要存放 他是10 发现比5打 因此存右边
这时候又来了第四个对象要存放 他是1 发现比5小 然后又和2比较 发现比2小 因此放在2的左子
以此类推 也就是说 他是这样一个规律 ID小的放左树 ID大的 放右树
0155BD9A 8B40 08 mov eax,dword ptr ds:[eax+0x8] 这边是遍历右树
0155BD9D EB 04 jmp short Game.0155BDA3 无条件跳转 这边直接跳到0155BDA3 再次循环
0155BD9F 8BC8 mov ecx,eax
0155BDA1 8B00 mov eax,dword ptr ds:[eax]
0155BDA3 8078 0D 00 cmp byte ptr ds:[eax+0xD],0x0 这边把[eax+d]和0比较 其实这里是判断是否遍历完了 上面有一句一样的判断
0155BDA7 ^ 74 EC je short Game.0155BD95
0155BDA9 3BCE cmp ecx,esi

最终把对象返回出去
还记得我们上一节说的血地址吗 [[eax+0x1B4]+0x4]+0x2CF0 eax即对象 也就是说 对象 +0x1B4]+0x4]+0x2CF0
最终往这个地址里面写入了我们人物的血值
其实大家 如果遍历当前对象地址 可以看到很多相关信息 比如坐标 蓝 经验 名字 等等

image.png

我简单用c#还原了 他这个遍历 发现了么有 其实和百度的例子 几乎一样
这其实实在遍历周围对象 怪物 NPC 采集物 也包括我们自己 等等 所以我们找血值的时候会跟到这里

image.png

我简单做了一个显示

这节就到这里吧 下次心情好了 再继续

相关文章

  • 通过当前血找二叉树(二)

    上一节我们找到了二叉树遍历的地方这节我们详细来分析下这个二叉树我们可以在头部下断 然后单步调试 一步步走 分析01...

  • 通过当前血找二叉树(一)

    我就是个菜逼 很菜的那种 就是做个记录 以后忘了可以复习下 也顺便分享下自己的学习思路方法 因为天龙八部人物信息...

  • 面试题34:二叉树中和为某一值的路径

    题目:输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。 思路:通过前序遍历树 如果当前节点...

  • XGBoost详解

    Prerequisite: CART回归树 CART回归树是假设树为二叉树,通过不断将特征进行分裂。比如当前树结点...

  • 二叉排序树BST

    概念 BTS: 对于任何一个非叶子节点,左子节点都比当前节点小,右子节点都比当前节点大 平衡二叉树和满二叉树,完全...

  • 之字形从上到下打印一棵二叉树

    之字形从上到下打印一棵二叉树 思路 通过2个栈交替保存当前行和它的下一行的数据 通过两个变量记录栈的当前索引和下个...

  • 二叉树基础算法

    1. 二叉树利用栈的非递归先序遍历 2. 二叉树利用栈的非递归后序遍历 3. 找二叉树最近的共同祖先 找二叉排序树...

  • JavaScript数据结构11——线索二叉树的遍历

    线索二叉树包括了 将一个二叉树转为线索二叉树 建立一个头结点,形成循环双向链表 遍历二叉树 控制台输出 当前到达节...

  • golang leetcode 1103. 二叉树寻路

    思路: 通过当前label计算父节点 题目限制 1 <= label <= 10^6完全二叉树每一层的节点和节点开...

  • 平衡二叉树

    题目描述输入一棵二叉树,判断该二叉树是否是平衡二叉树。 思路法一:每次判断当前树的左右子树高度差,然后判断子树的子...

网友评论

      本文标题:通过当前血找二叉树(二)

      本文链接:https://www.haomeiwen.com/subject/engxcctx.html