Binary Bomb Lab Phase6 节点顺序错误及正确排序规则定位问题
排序规则定位
排序规则由以下汇编代码定义,位于phase_8偏移+229到+238处:
0x56557b61 <+229>: mov 0x8(%ebx),%eax # 取当前节点的下一个节点指针 0x56557b64 <+232>: mov (%eax),%eax # 取下一个节点的存储值 0x56557b66 <+234>: cmp %eax,(%ebx) # 比较当前节点值和下一个节点值 0x56557b68 <+236>: jle 0x56557b59 <phase_8+221> # 当前值<=下一个值则校验通过,继续遍历 0x56557b6a <+238>: call 0x56557f7d <explode_bomb> # 当前值>下一个值则引爆炸弹
对应规则:构造的链表必须按节点存储值从小到大升序排列。
输入序列求解
- 原始链表首地址为
0x5655c0d4(见<+136>行的立即数赋值),每个节点结构如下:struct node { int value; // 节点存储值,偏移0字节 void* next; // 下一个节点指针,偏移8字节 }; - 在gdb中执行命令
x/24w 0x5655c0d4即可读取6个原始节点的全部信息,该版本实验的节点序号和对应value映射关系为:原始节点序号 value(十进制) 1 312 2 168 3 924 4 445 5 671 6 273 - 将节点按value升序排列,对应的节点序号即为输入序列:
2 6 1 4 5 3,输入该序列即可通过阶段校验。
内容的提问来源于stack exchange,提问作者Gope S.
相关产品推荐
相关产品推荐

