所以我正在做经典的二元炸弹并且设法进入第6阶段而没有太多麻烦但是我一直在试图弄清楚这个最后阶段(除了秘密阶段)所以任何帮助都将是赞赏。
08048db5 <phase_6>:
8048db5: 56 push %esi
8048db6: 53 push %ebx
8048db7: 83 ec 44 sub $0x44,%esp
8048dba: 8d 44 24 10 lea 0x10(%esp),%eax
8048dbe: 89 44 24 04 mov %eax,0x4(%esp)
8048dc2: 8b 44 24 50 mov 0x50(%esp),%eax
8048dc6: 89 04 24 mov %eax,(%esp)
8048dc9: e8 fe 04 00 00 call 80492cc <read_six_numbers>
8048dce: be 00 00 00 00 mov $0x0,%esi
8048dd3: 8b 44 b4 10 mov 0x10(%esp,%esi,4),%eax
8048dd7: 83 e8 01 sub $0x1,%eax
8048dda: 83 f8 05 cmp $0x5,%eax
8048ddd: 76 05 jbe 8048de4 <phase_6+0x2f>
8048ddf: e8 a9 04 00 00 call 804928d <explode_bomb>
8048de4: 83 c6 01 add $0x1,%esi
8048de7: 83 fe 06 cmp $0x6,%esi
8048dea: 74 1b je 8048e07 <phase_6+0x52>
8048dec: 89 f3 mov %esi,%ebx
8048dee: 8b 44 9c 10 mov 0x10(%esp,%ebx,4),%eax
8048df2: 39 44 b4 0c cmp %eax,0xc(%esp,%esi,4)
8048df6: 75 05 jne 8048dfd <phase_6+0x48>
8048df8: e8 90 04 00 00 call 804928d <explode_bomb>
8048dfd: 83 c3 01 add $0x1,%ebx
8048e00: 83 fb 05 cmp $0x5,%ebx
8048e03: 7e e9 jle 8048dee <phase_6+0x39>
8048e05: eb cc jmp 8048dd3 <phase_6+0x1e>
8048e07: 8d 44 24 10 lea 0x10(%esp),%eax
8048e0b: 8d 5c 24 28 lea 0x28(%esp),%ebx
8048e0f: b9 07 00 00 00 mov $0x7,%ecx
8048e14: 89 ca mov %ecx,%edx
8048e16: 2b 10 sub (%eax),%edx
8048e18: 89 10 mov %edx,(%eax)
8048e1a: 83 c0 04 add $0x4,%eax
8048e1d: 39 d8 cmp %ebx,%eax
8048e1f: 75 f3 jne 8048e14 <phase_6+0x5f>
8048e21: bb 00 00 00 00 mov $0x0,%ebx
8048e26: eb 1d jmp 8048e45 <phase_6+0x90>
8048e28: 8b 52 08 mov 0x8(%edx),%edx
8048e2b: 83 c0 01 add $0x1,%eax
8048e2e: 39 c8 cmp %ecx,%eax
8048e30: 75 f6 jne 8048e28 <phase_6+0x73>
8048e32: eb 05 jmp 8048e39 <phase_6+0x84>
8048e34: ba 38 c1 04 08 mov $0x804c138,%edx
8048e39: 89 54 b4 28 mov %edx,0x28(%esp,%esi,4)
8048e3d: 83 c3 01 add $0x1,%ebx
8048e40: 83 fb 06 cmp $0x6,%ebx
8048e43: 74 17 je 8048e5c <phase_6+0xa7>
8048e45: 89 de mov %ebx,%esi
8048e47: 8b 4c 9c 10 mov 0x10(%esp,%ebx,4),%ecx
8048e4b: 83 f9 01 cmp $0x1,%ecx
8048e4e: 7e e4 jle 8048e34 <phase_6+0x7f>
8048e50: b8 01 00 00 00 mov $0x1,%eax
8048e55: ba 38 c1 04 08 mov $0x804c138,%edx
8048e5a: eb cc jmp 8048e28 <phase_6+0x73>
8048e5c: 8b 5c 24 28 mov 0x28(%esp),%ebx
8048e60: 8d 44 24 2c lea 0x2c(%esp),%eax
8048e64: 8d 74 24 40 lea 0x40(%esp),%esi
8048e68: 89 d9 mov %ebx,%ecx
8048e6a: 8b 10 mov (%eax),%edx
8048e6c: 89 51 08 mov %edx,0x8(%ecx)
8048e6f: 83 c0 04 add $0x4,%eax
8048e72: 39 f0 cmp %esi,%eax
8048e74: 74 04 je 8048e7a <phase_6+0xc5>
8048e76: 89 d1 mov %edx,%ecxi
8048e78: eb f0 jmp 8048e6a <phase_6+0xb5>
8048e7a: c7 42 08 00 00 00 00 movl $0x0,0x8(%edx)
8048e81: be 05 00 00 00 mov $0x5,%esi
8048e86: 8b 43 08 mov 0x8(%ebx),%eax
8048e89: 8b 00 mov (%eax),%eax
8048e8b: 39 03 cmp %eax,(%ebx)
8048e8d: 7d 05 jge 8048e94 <phase_6+0xdf>
8048e8f: e8 f9 03 00 00 call 804928d <explode_bomb>
8048e94: 8b 5b 08 mov 0x8(%ebx),%ebx
8048e97: 83 ee 01 sub $0x1,%esi
8048e9a: 75 ea jne 8048e86 <phase_6+0xd1>
8048e9c: 83 c4 44 add $0x44,%esp
8048e9f: 5b pop %ebx
8048ea0: 5e pop %esi
8048ea1: c3 ret
我发现它正在创建一个包含6个节点的链表,其中包含以下值:
节点:十六进制:十二月:
1:169 361
2:186 390
3:31b 795
4:1df 479
5:365 869
6:20d 525
现在我认为它希望节点按特定顺序输入,因为它正在查找6个数字,但我无法弄清楚该顺序是什么。我走过代码试图弄清楚它是如何以及在哪里使用节点,我在
找到了8048e8b: 39 03 cmp %eax,(%ebx)
它正在对节点的两个值进行比较,但我似乎无法弄清楚决定哪两个节点进行比较的原因。经过这次比较后,它会爆炸。唯一一次它设法跳过爆炸炸弹是如果6是我的输入中的第二个数字,但随后它会在下一次爆炸时爆炸。
环顾四周,我发现大多数人的炸弹都是根据它们的值按升序查找节点。我尝试了这个并且降序排列,也没有解除炸弹。
_ 6 _ _ _ _
所以我猜我需要帮助的是确定炸弹作为输出寻找的顺序。我很确定我只是遗漏了一些明显的东西,但经过几个小时的集会后,我的大脑被炒了。
感谢您的帮助。
答案 0 :(得分:3)
刚刚解决了它。
这是我的问题,以防将来帮助任何人。
代码中有一行基本上是7 - X,其中X是索引。
所以节点的降序是
5 3 6 4 2 1
所以我要做的就是把每个索引从7减去它,这就是我的输入
2 4 1 3 5 6
哪个解除了炸弹