Возникают проблемы с пониманием кода сборки и использования GDB - PullRequest
0 голосов
/ 12 апреля 2019

Это мой код сборки:

    0x08048bd0 <+0>:    sub    $0x2c,%esp
    0x08048bd3 <+3>:    movl   $0x0,0x1c(%esp)
    0x08048bdb <+11>:   lea    0x1c(%esp),%eax
    0x08048bdf <+15>:   mov    %eax,0x8(%esp)
    0x08048be3 <+19>:   movl   $0x804a439,0x4(%esp)
    0x08048beb <+27>:   mov    0x30(%esp),%eax
    0x08048bef <+31>:   mov    %eax,(%esp)
 => 0x08048bf2 <+34>:   call   0x8048870 <__isoc99_sscanf@plt>
    0x08048bf7 <+39>:   cmp    $0x1,%eax
    0x08048bfa <+42>:   je     0x8048c01 <phase_1+49>
    0x08048bfc <+44>:   call   0x8049455 <explode_bomb>
    0x08048c01 <+49>:   cmpl   $0x19a,0x1c(%esp)
    0x08048c09 <+57>:   je     0x8048c10 <phase_1+64>
    0x08048c0b <+59>:   call   0x8049455 <explode_bomb>
    0x08048c10 <+64>:   add    $0x2c,%esp
    0x08048c13 <+67>:   ret

Я работаю с бинарной бомбой, она дает код сборки, из которого мне нужно найти правильный ввод, чтобы обезвредить его.Я новичок в GDB и сборке, поэтому у меня возникли проблемы с его конкретной частью кода.

Я установил точку останова на phase_1, но когда я использую ni для прохождения кода, бомба взорветсякогда я доберусь до <explode_bomb> это называется, есть ли способ справиться с этим?Я понимаю, что eax должно быть равно 1, чтобы бомба не взорвалась.Я смущен тем, что происходит в первой вызванной функции, когда я набираю si, это дает что-то похожее на это.

 => 0x08048870 <+0>:    jmp    *0x804d058
    0x08048876 <+6>:    push   $0x98
    0x0804887b <+11>:   jmp    0x8048730
...