所以我正在做经典的二进制炸弹,并成功地进入了第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:186390
3:31b 795
4:1df479
5:365 869
6:20d 525
现在,我认为它希望节点按一定的顺序输入,因为它正在寻找6个数字,但我不知道这个顺序应该是什么。我浏览了代码,试图弄清楚它是如何以及在哪里使用节点的,我在找到了
8048e8b: 39 03 cmp %eax,(%ebx)
它正在对节点的两个值进行比较,但我似乎不知道是什么决定了比较哪两个节点。经过这种比较,它爆炸了。它唯一一次成功跳过爆炸炸弹是如果6是我输入的第二个数字,但它会在下一次爆炸。
环顾SO,我发现大多数人的炸弹都是根据他们的价值观按升序寻找节点。我试过这个和降序,但都没有拆除炸弹。
_6
所以我想我需要帮助的是确定炸弹的输出顺序。我很确定我只是错过了一些明显的东西,但经过几个小时的组装,我的大脑被炸了。
谢谢你的帮助。
刚刚解决。
这是我的问题,以防将来对任何人都有帮助。
代码中有一行基本上是7-X,其中X是索引。
所以我的节点的降序是
5 3 6 4 2 1
所以我要做的是取每个指数,从7减去它,这就是我的输入
2 4 1 3 5 6
它拆除了炸弹