Бинарная бомба - Фаза 4
Мне очень трудно отследить код сборки для следующей бинарной бомбы (задание из школы, где бомба должна быть обезврежена, эта бомба содержит 6 фаз, каждая из которых имеет 1 правильный ввод для перехода к следующей фазе). Я в настоящее время на фазе_4, и она имеет рекурсивную функцию под названием func4. Я определил, что вход "% d% d " что два целых числа. Однако я не могу понять, что делает func4, даже после получения информации обо всех регистрах на каждом этапе.
Phase_4:
(gdb) disas
Dump of assembler code for function phase_4:
=> 0x08048e24 : sub $0x2c,%esp
0x08048e27 : lea 0x1c(%esp),%eax
0x08048e2b : mov %eax,0xc(%esp)
0x08048e2f : lea 0x18(%esp),%eax
0x08048e33 : mov %eax,0x8(%esp)
0x08048e37 : movl $0x804a7f1,0x4(%esp)
0x08048e3f : mov 0x30(%esp),%eax
0x08048e43 : mov %eax,(%esp)
0x08048e46 : call 0x80488d0
0x08048e4b : cmp $0x2,%eax
0x08048e4e : jne 0x8048e5d
0x08048e50 : mov 0x18(%esp),%eax
0x08048e54 : test %eax,%eax
0x08048e56 : js 0x8048e5d
0x08048e58 : cmp $0xe,%eax
0x08048e5b : jle 0x8048e62
0x08048e5d : call 0x8049470
0x08048e62 : movl $0xe,0x8(%esp)
0x08048e6a : movl $0x0,0x4(%esp)
0x08048e72 : mov 0x18(%esp),%eax
0x08048e76 : mov %eax,(%esp)
0x08048e79 : call 0x8048dbb
0x08048e7e : cmp $0x25,%eax
0x08048e81 : jne 0x8048e8a
0x08048e83 : cmpl $0x25,0x1c(%esp)
0x08048e88 : je 0x8048e8f
0x08048e8a : call 0x8049470
0x08048e8f : add $0x2c,%esp
0x08048e92 : ret
End of assembler dump.
func4:
Breakpoint 2, 0x08048dbb in func4 ()
(gdb) disas
Dump of assembler code for function func4:
=> 0x08048dbb : sub $0x1c,%esp
0x08048dbe : mov %ebx,0x14(%esp)
0x08048dc2 : mov %esi,0x18(%esp)
0x08048dc6 : mov 0x20(%esp),%eax
0x08048dca : mov 0x24(%esp),%edx
0x08048dce : mov 0x28(%esp),%esi
0x08048dd2 : mov %esi,%ecx
0x08048dd4 : sub %edx,%ecx
0x08048dd6 : mov %ecx,%ebx
0x08048dd8 : shr $0x1f,%ebx
0x08048ddb : add %ebx,%ecx
0x08048ddd : sar %ecx
0x08048ddf : lea (%ecx,%edx,1),%ebx
0x08048de2 : cmp %eax,%ebx
0x08048de4 : jle 0x8048dfd
0x08048de6 : lea -0x1(%ebx),%ecx
0x08048de9 : mov %ecx,0x8(%esp)
0x08048ded : mov %edx,0x4(%esp)
0x08048df1 : mov %eax,(%esp)
0x08048df4 : call 0x8048dbb
0x08048df9 : add %eax,%ebx
0x08048dfb : jmp 0x8048e16
0x08048dfd : cmp %eax,%ebx
0x08048dff : jge 0x8048e16
0x08048e01 : mov %esi,0x8(%esp)
0x08048e05 : lea 0x1(%ebx),%edx
0x08048e08 : mov %edx,0x4(%esp)
0x08048e0c : mov %eax,(%esp)
0x08048e0f : call 0x8048dbb
0x08048e14 : add %eax,%ebx
0x08048e16 : mov %ebx,%eax
0x08048e18 : mov 0x14(%esp),%ebx
0x08048e1c : mov 0x18(%esp),%esi
0x08048e20 : add $0x1c,%esp
0x08048e23 : ret
End of assembler dump.