бинарная бомба фаза 4 с двумя рекурсивными функциями - PullRequest
0 голосов
/ 14 сентября 2018

Это код для бинарной бомбы.Я выяснил, что функция fun вычисляет последовательность Фибоначчи.Я думаю, что функция bliss вычисляет среднее значение, но я не понимаю, для чего она использует параметры.Я понимаю, что делается в основном.Буду признателен за любую помощь.

Дамп кода ассемблера для функции bliss:

  bliss:
   0x080488b6 <+0>:     push   %ebp
   0x080488b7 <+1>:     mov    %esp,%ebp
   0x080488b9 <+3>:     push   %edi
   0x080488ba <+4>:     push   %esi
   0x080488bb <+5>:     push   %ebx
   0x080488bc <+6>:     sub    $0xc,%esp
   0x080488bf <+9>:     mov    0x8(%ebp),%ebx
   0x080488c2 <+12>:    mov    0xc(%ebp),%esi
   0x080488c5 <+15>:    mov    0x10(%ebp),%edx
   0x080488c8 <+18>:    mov    0x14(%ebp),%ecx
   0x080488cb <+21>:    mov    %ecx,%edi
   0x080488cd <+23>:    sub    %edx,%edi
   0x080488cf <+25>:    mov    %edi,%eax
   0x080488d1 <+27>:    shr    $0x1f,%eax
   0x080488d4 <+30>:    add    %edi,%eax
   0x080488d6 <+32>:    sar    %eax
   0x080488d8 <+34>:    add    %edx,%eax
   0x080488da <+36>:    cmp    %edx,%ecx
   0x080488dc <+38>:    jl     0x8048927 <bliss+113>
   0x080488de <+40>:    cmp    %edx,%ecx
   0x080488e0 <+42>:    je     0x8048901 <bliss+75>
   0x080488e2 <+44>:    cmp    (%ebx,%eax,4),%esi
   0x080488e5 <+47>:    jg     0x804890e <bliss+88>
   0x080488e7 <+49>:    push   %eax
   0x080488e8 <+50>:    push   %edx
   0x080488e9 <+51>:    push   %esi
   0x080488ea <+52>:    push   %ebx
   0x080488eb <+53>:    call   0x80488b6 <bliss>
   0x080488f0 <+58>:    add    $0x10,%esp
   0x080488f3 <+61>:    test   %eax,%eax
   0x080488f5 <+63>:    js     0x804892e <bliss+120>
   0x080488f7 <+65>:    add    %eax,%eax
   0x080488f9 <+67>:    lea    -0xc(%ebp),%esp
   0x080488fc <+70>:    pop    %ebx
   0x080488fd <+71>:    pop    %esi
   0x080488fe <+72>:    pop    %edi
   0x080488ff <+73>:    pop    %ebp
   0x08048900 <+74>:    ret
   0x08048901 <+75>:    cmp    %esi,(%ebx,%eax,4)
   0x08048904 <+78>:    setne  %al
   0x08048907 <+81>:    movzbl %al,%eax
   0x0804890a <+84>:    neg    %eax
   0x0804890c <+86>:    jmp    0x80488f9 <bliss+67>
   0x0804890e <+88>:    push   %ecx
   0x0804890f <+89>:    add    $0x1,%eax
   0x08048912 <+92>:    push   %eax
   0x08048913 <+93>:    push   %esi
   0x08048914 <+94>:    push   %ebx
   0x08048915 <+95>:    call   0x80488b6 <bliss>
   0x0804891a <+100>:   add    $0x10,%esp
   0x0804891d <+103>:   test   %eax,%eax
   0x0804891f <+105>:   js     0x8048935 <bliss+127>
   0x08048921 <+107>:   lea    0x1(%eax,%eax,1),%eax
   0x08048925 <+111>:   jmp    0x80488f9 <bliss+67>
   0x08048927 <+113>:   mov    $0xffffffff,%eax
   0x0804892c <+118>:   jmp    0x80488f9 <bliss+67>
   0x0804892e <+120>:   mov    $0xffffffff,%eax
   0x08048933 <+125>:   jmp    0x80488f9 <bliss+67>
   0x08048935 <+127>:   mov    $0xffffffff,%eax
   0x0804893a <+132>:   jmp    0x80488f9 <bliss+67>

Дамп кода ассемблера для подключения функции:

  wiring:
   0x0804893c <+0>:     push   %ebp
   0x0804893d <+1>:     mov    %esp,%ebp
   0x0804893f <+3>:     push   %edi
   0x08048940 <+4>:     push   %esi
   0x08048941 <+5>:     push   %ebx
   0x08048942 <+6>:     sub    $0x1c,%esp
   0x08048945 <+9>:     call   0x8048570 <__x86.get_pc_thunk.bx>
   0x0804894a <+14>:    add    $0x16b6,%ebx
   0x08048950 <+20>:    mov    0x8(%ebp),%esi
   0x08048953 <+23>:    lea    -0x20(%ebp),%eax
   0x08048956 <+26>:    push   %eax
   0x08048957 <+27>:    lea    -0x1c(%ebp),%eax
   0x0804895a <+30>:    push   %eax
   0x0804895b <+31>:    lea    -0x1571(%ebx),%eax
   0x08048961 <+37>:    push   %eax
   0x08048962 <+38>:    push   %esi
   0x08048963 <+39>:    call   0x8048520 <sscanf@plt>
   0x08048968 <+44>:    add    $0x10,%esp
   0x0804896b <+47>:    cmp    $0x2,%eax
   0x0804896e <+50>:    je     0x8048975 <wiring+57>
   0x08048970 <+52>:    call   0x8048719 <explode_bomb>
   0x08048975 <+57>:    cmpl   $0x6,-0x1c(%ebp)
   0x08048979 <+61>:    jle    0x80489c4 <wiring+136>
   0x0804897b <+63>:    cmpl   $0x0,-0x20(%ebp)
   0x0804897f <+67>:    js     0x80489c4 <wiring+136>
   0x08048981 <+69>:    sub    $0xc,%esp
   0x08048984 <+72>:    pushl  -0x1c(%ebp)
   0x08048987 <+75>:    call   0x804887f <fun>
   0x0804898c <+80>:    add    $0x10,%esp
   0x0804898f <+83>:    mov    %eax,%edi
   0x08048991 <+85>:    push   $0x20
   0x08048993 <+87>:    push   $0x0
   0x08048995 <+89>:    pushl  -0x20(%ebp)
   0x08048998 <+92>:    lea    0x60(%ebx),%eax
   0x0804899e <+98>:    push   %eax
   0x0804899f <+99>:    call   0x80488b6 <bliss>
   0x080489a4 <+104>:   add    $0x10,%esp
   0x080489a7 <+107>:   cmp    %eax,%edi
   0x080489a9 <+109>:   je     0x80489b0 <wiring+116>
   0x080489ab <+111>:   call   0x8048719 <explode_bomb>
   0x080489b0 <+116>:   sub    $0xc,%esp
   0x080489b3 <+119>:   push   %esi
   0x080489b4 <+120>:   call   0x804863b <defuse>
   0x080489b9 <+125>:   add    $0x10,%esp
   0x080489bc <+128>:   lea    -0xc(%ebp),%esp
   0x080489bf <+131>:   pop    %ebx
   0x080489c0 <+132>:   pop    %esi
   0x080489c1 <+133>:   pop    %edi
   0x080489c2 <+134>:   pop    %ebp
   0x080489c3 <+135>:   ret
   0x080489c4 <+136>:   call   0x8048719 <explode_bomb>
   0x080489c9 <+141>:   jmp    0x8048981 <wiring+69>
...