0

【宿題の免責事項】

私はバイナリー・ボム・ラボに取り組んでいます。基本的に、「爆弾」実行可能ファイルの objdump を使用して、「爆弾」を武装解除するための正しい入力文字列を見つける必要があります。現在、私は 5/7 フェーズを解決しており、このアセンブリを含む 6 番目のフェーズに取り組んでいます:

 8048eb0:   39 18                   cmp    %ebx,(%eax)
 8048eb2:   74 05                   je     8048eb9 <phase_6+0x49>
 8048eb4:   e8 d0 0a 00 00          call   8049989 <explode_bomb>

je爆弾を爆発させないようにするには、関数の代わりに呼び出されるように、ebx と eax を同じ値に設定する必要がありexplode_bombます。それで、ebx と eax の同じ値を与える入力文字列を見つけました。ただし、プログラムの実行でこの時点に到達するとje、ebx と eax が同じ値であっても、が呼び出されません。GDB では:

Good work!  On to the next...
134530284

Breakpoint 2, 0x08048e74 in phase_6 ()
Current language:  auto; currently asm
(gdb) break *0x8048eb0
Breakpoint 3 at 0x8048eb0
(gdb) c
Continuing.

Breakpoint 3, 0x08048eb0 in phase_6 ()
(gdb) print $ebx
$1 = 134530284
(gdb) print $eax
$2 = 134530284
(gdb) si
0x08048eb2 in phase_6 ()
(gdb) si
0x08048eb4 in phase_6 ()
(gdb) si
0x08049989 in explode_bomb ()
(gdb) 

なぜこれが機能しないのですか?この問題が発生したのは、この割り当てが初めてです。

4

1 に答える 1

1

(%eax)と同じではありません%eax

(%eax) は、それ自体eaxではなく、 が指す値をロードすることを意味しますeax

于 2011-09-30T03:45:51.257 に答える