Это мой код сборки:
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