アセンブリコードを理解する

ジャッカオ
   0x08048d02 <+0>: push   %ebp
   0x08048d03 <+1>: mov    %esp,%ebp
   0x08048d05 <+3>: push   %esi
   0x08048d06 <+4>: push   %ebx
   0x08048d07 <+5>: sub    $0x30,%esp       //minus 48 to esp
   0x08048d0a <+8>: lea    -0x20(%ebp),%eax     //eax = first element in the array

   0x08048d0d <+11>:    mov    %eax,0x4(%esp)       //
   0x08048d11 <+15>:    mov    0x8(%ebp),%eax       //input?
   0x08048d14 <+18>:    mov    %eax,(%esp)      //esp = eax
   0x08048d17 <+21>:    call   0x804914a <read_six_numbers>

   0x08048d1c <+26>:    cmpl   $0x0,-0x20(%ebp)     // first int compare to 0

   0x08048d20 <+30>:    jns    0x8048d27 <phase_2+37>   //if not negative, jump

   0x08048d22 <+32>:    call   0x8049108 <explode_bomb> // < 0

   0x08048d27 <+37>:    mov    $0x1, %ebx       //set ebx = 1
   0x08048d2c <+42>:    lea    -0x20(%ebp),%esi     //set esi to the address of the first element of the array
   0x08048d2f <+45>:    mov    -0x4(%esi,%ebx,4),%eax   //eax = esi + ebx * 4 - 4
   0x08048d33 <+49>:    sub    %ebx,%eax        //ebx  = ebx - eax
   0x08048d35 <+51>:    cmp    %eax,(%esi,%ebx,4)   //eax = (esi + ebx * 4)

   0x08048d38 <+54>:    je     0x8048d3f <phase_2+61>

   0x08048d3a <+56>:    call   0x8049108 <explode_bomb>

   0x08048d3f <+61>:    add    $0x1,%ebx        //ebx = 2;
   0x08048d42 <+64>:    cmp    $0x6,%ebx        //if (ebx < 6)
   0x08048d45 <+67>:    jne    0x8048d2f <phase_2+45>   //do the loop again.

   0x08048d47 <+69>:    add    $0x30,%esp       //add 48 to esp.
   0x08048d4a <+72>:    pop    %ebx
   0x08048d4b <+73>:    pop    %esi
   0x08048d4c <+74>:    pop    %ebp
   0x08048d4d <+75>:    ret   

上記のアセンブリコードがあります。これの目標は、「explode_bomb」に到達しないことです。自分の作品にコメントしましたが、6つの数字が必要なようです。forループがあるので、次の数は常に前の数* 4-4に等しいことがわかったので、x、4x-4、4(4x-4)などを試しました。ここでx> 0しかし、それは機能しません。誰かがここで何が問題なのか指摘できますか?助けてくれてありがとう!

道化師

ああ、また爆弾。このフェーズはまだ見ていません;)

あなたは混乱しているように見えるmov -0x4(%esi,%ebx,4),%eaxcmp %eax,(%esi,%ebx,4)そこでの算術演算は、値ではなくポインタに適用されます。基本的に、1つ目はarray[i-1]で、2つ目はarray[i]で、ebxi(配列インデックス)でesiあり、ベースアドレスです。による乗算4は、各要素が4バイト長であるためです。

そのため、ループは次のようになります。

for(i = 1; i != 6; i++)
{
    if (array[i - 1] - i != array[i]) explode_bomb();
}

そのような可能な解決策であるように、第1の要素は、より任意の数の大きいこと、またはゼロに等しくすることができ0-1-3-6-10-15

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

cのアセンブリコードを理解する

分類Dev

このパーツアームアセンブリコードを理解する

分類Dev

このアセンブリコードの流れを理解する方法

分類Dev

Xcodeのx86-64アセンブリコードを理解する

分類Dev

x86-64アセンブリ:クアッドワードオペコード `shlq`を理解する

分類Dev

CコンパイラからのMIPSアセンブリコードを理解する

分類Dev

<getbuf>のアセンブルコードが何をするかを理解する

分類Dev

バイナリ爆弾フェーズ2のアセンブリコードを理解する

分類Dev

Dalvikコードの逆アセンブリを理解していますか?

分類Dev

[cコード->アセンブリ]コードを理解しようとしています

分類Dev

アセンブリでこのパターンを理解する

分類Dev

Pythonコードをアセンブリに翻訳する

分類Dev

アセンブリで3番地コードを変換する

分類Dev

アセンブリ コードを整理する方法

分類Dev

アセンブリコードをcコードにリバースエンジニアリングする

分類Dev

このTMGのアセンブリコードをバージョン6Unixから理解するにはどうすればよいですか?

分類Dev

このアセンブリコードの理解に問題があります

分類Dev

このアセンブリx86コードを理解できません

分類Dev

g ++アセンブリコード命令アドレスを取得する方法

分類Dev

メッセージを印刷するAutoItアセンブリコード

分類Dev

アセンブリが初めてで、簡単なコードを理解しようとしている

分類Dev

テレタイプモードで文字を出力するためのnasmアセンブリを理解する

分類Dev

アセンブリコードの理解と分析

分類Dev

いくつかのアセンブリコードを理解していますか?

分類Dev

ブール式をアセンブリコードに変換する方法

分類Dev

この埋め込みアセンブリコードを理解するにはどうすればよいですか?

分類Dev

アセンブリコード命令がマシンコード命令と同等である場合、これらのアセンブリコードとマシンコードの違いを理解していません

分類Dev

アセンブリコードの一部をジャンプするGdb

分類Dev

ARMアセンブリ命令をARM機械語にエンコードする

Related 関連記事

  1. 1

    cのアセンブリコードを理解する

  2. 2

    このパーツアームアセンブリコードを理解する

  3. 3

    このアセンブリコードの流れを理解する方法

  4. 4

    Xcodeのx86-64アセンブリコードを理解する

  5. 5

    x86-64アセンブリ:クアッドワードオペコード `shlq`を理解する

  6. 6

    CコンパイラからのMIPSアセンブリコードを理解する

  7. 7

    <getbuf>のアセンブルコードが何をするかを理解する

  8. 8

    バイナリ爆弾フェーズ2のアセンブリコードを理解する

  9. 9

    Dalvikコードの逆アセンブリを理解していますか?

  10. 10

    [cコード->アセンブリ]コードを理解しようとしています

  11. 11

    アセンブリでこのパターンを理解する

  12. 12

    Pythonコードをアセンブリに翻訳する

  13. 13

    アセンブリで3番地コードを変換する

  14. 14

    アセンブリ コードを整理する方法

  15. 15

    アセンブリコードをcコードにリバースエンジニアリングする

  16. 16

    このTMGのアセンブリコードをバージョン6Unixから理解するにはどうすればよいですか?

  17. 17

    このアセンブリコードの理解に問題があります

  18. 18

    このアセンブリx86コードを理解できません

  19. 19

    g ++アセンブリコード命令アドレスを取得する方法

  20. 20

    メッセージを印刷するAutoItアセンブリコード

  21. 21

    アセンブリが初めてで、簡単なコードを理解しようとしている

  22. 22

    テレタイプモードで文字を出力するためのnasmアセンブリを理解する

  23. 23

    アセンブリコードの理解と分析

  24. 24

    いくつかのアセンブリコードを理解していますか?

  25. 25

    ブール式をアセンブリコードに変換する方法

  26. 26

    この埋め込みアセンブリコードを理解するにはどうすればよいですか?

  27. 27

    アセンブリコード命令がマシンコード命令と同等である場合、これらのアセンブリコードとマシンコードの違いを理解していません

  28. 28

    アセンブリコードの一部をジャンプするGdb

  29. 29

    ARMアセンブリ命令をARM機械語にエンコードする

ホットタグ

アーカイブ