Бинарная бомба - Фаза 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.

Ответы на вопрос(1)

Ваш ответ на вопрос