cmp и je не работают при сравнении одинаковых значений - PullRequest
0 голосов
/ 30 сентября 2011

[Отказ от домашней работы]

Я работаю в лаборатории бинарной бомбы .По сути, я должен использовать 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>

Чтобы не взорвать бомбу, мне нужно установить одинаковые значения для ebx и eax, чтобы je вызывается вместо функции 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) 

Почему это не работает?Это первое задание, когда возникла эта проблема.

1 Ответ

1 голос
/ 30 сентября 2011

(%eax) не то же самое, что %eax.

(% eax) означает загрузку значения, на которое указывает eax, а не eax.

...