1. ホーム
  2. assembly

[解決済み] Binary Bomb Phase_6 Node Order?

2022-02-08 14:07:27

質問

バイナリーボムをやっていて、なんとかフェーズ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つのノードからなるリンクリストを作成していることが分かりました。

ノード Hex: Dec:
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)    

はノードの2つの値を比較しているのですが、どのノードが比較されるかを決定するものがわからないようです。この比較の後、爆発しています。唯一爆発を回避できたのは、6が入力の2番目の数字である場合ですが、その場合は次の処理で爆発してしまいます。

SOで調べてみると、ほとんどの人のボムは、値の昇順でノードを探していることがわかりました。私はこの方法と降順で試してみましたが、どちらも爆弾を解除することはできませんでした。

_ 6 _ _ _ _


つまり、私が助けを必要としているのは、爆弾が出力として求めている順序を決定することだと思います。私は明らかな何かを見逃しているだけだと確信していますが、数時間アセンブリを行った後、私の脳は燃えています。

よろしくお願いします。

解決方法は?

ちょうど解決しました。

将来的に誰かの役に立つかもしれないので、私の問題を紹介します。

コードの中に、基本的に7 - X(Xはインデックス)である行があります。

つまり、私のノードの降順は

5 3 6 4 2 1

そこで、各指数を取って7からマイナスする必要があり、それが私の入力でした。

<ブロッククオート

2 4 1 3 5 6

爆弾の信管を外す