Binary Bomb Phase_6节点订单?

时间:2016-04-30 03:27:21

标签: assembly

所以我正在做经典的二元炸弹并且设法进入第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 _ _ _ _

所以我猜我需要帮助的是确定炸弹作为输出寻找的顺序。我很确定我只是遗漏了一些明显的东西,但经过几个小时的集会后,我的大脑被炒了。

感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

刚刚解决了它。

这是我的问题,以防将来帮助任何人。

代码中有一行基本上是7 - X,其中X是索引。

所以节点的降序是

  

5 3 6 4 2 1

所以我要做的就是把每个索引从7减去它,这就是我的输入

  

2 4 1 3 5 6

哪个解除了炸弹