Бинарная бомба фаза 4 - PullRequest
       35

Бинарная бомба фаза 4

0 голосов
/ 24 сентября 2019

Это фаза_4.Я знаю, что запрашиваемый ввод - это формат% d% d из шестнадцатеричной строки x/s 0x55555555758d.Но после этого я как бы теряюсь из-за того, что делает код?

Это phase_4

   0x0000555555555be5 <+0>:     sub    $0x18,%rsp
   0x0000555555555be9 <+4>:     mov    %fs:0x28,%rax
   0x0000555555555bf2 <+13>:    mov    %rax,0x8(%rsp)
   0x0000555555555bf7 <+18>:    xor    %eax,%eax
   0x0000555555555bf9 <+20>:    mov    %rsp,%rcx
   0x0000555555555bfc <+23>:    lea    0x4(%rsp),%rdx
   0x0000555555555c01 <+28>:    lea    0x1985(%rip),%rsi        # 0x55555555758d
   0x0000555555555c08 <+35>:    callq  0x555555555680 <__isoc99_sscanf@plt>
   0x0000555555555c0d <+40>:    cmp    $0x2,%eax
   0x0000555555555c10 <+43>:    jne    0x555555555c1d <phase_4+56>
   0x0000555555555c12 <+45>:    mov    (%rsp),%eax
   0x0000555555555c15 <+48>:    sub    $0x2,%eax
   0x0000555555555c18 <+51>:    cmp    $0x2,%eax
   0x0000555555555c1b <+54>:    jbe    0x555555555c22 <phase_4+61>
   0x0000555555555c1d <+56>:    callq  0x555555556238 <explode_bomb>
   0x0000555555555c22 <+61>:    mov    (%rsp),%esi
   0x0000555555555c25 <+64>:    mov    $0x7,%edi
   0x0000555555555c2a <+69>:    callq  0x555555555bac <func4>
   0x0000555555555c2f <+74>:    cmp    %eax,0x4(%rsp)
   0x0000555555555c33 <+78>:    je     0x555555555c3a <phase_4+85>
   0x0000555555555c35 <+80>:    callq  0x555555556238 <explode_bomb>
   0x0000555555555c3a <+85>:    mov    0x8(%rsp),%rax
   0x0000555555555c3f <+90>:    xor    %fs:0x28,%rax
   0x0000555555555c48 <+99>:    jne    0x555555555c4f <phase_4+106>
   0x0000555555555c4a <+101>:   add    $0x18,%rsp
   0x0000555555555c4e <+105>:   retq   
   0x0000555555555c4f <+106>:   callq  0x5555555555e0 <__stack_chk_fail@plt>

Это func4.Мне нужна помощь, чтобы понять, что делает эта функция?

   0x0000555555555bac <+0>:     mov    $0x0,%eax
   0x0000555555555bb1 <+5>:     test   %edi,%edi
   0x0000555555555bb3 <+7>:     jle    0x555555555bbc <func4+16>
   0x0000555555555bb5 <+9>:     mov    %esi,%eax
   0x0000555555555bb7 <+11>:    cmp    $0x1,%edi
   0x0000555555555bba <+14>:    jne    0x555555555bbe <func4+18>
   0x0000555555555bbc <+16>:    repz retq 
   0x0000555555555bbe <+18>:    push   %r12
   0x0000555555555bc0 <+20>:    push   %rbp
   0x0000555555555bc1 <+21>:    push   %rbx
   0x0000555555555bc2 <+22>:    mov    %esi,%r12d
   0x0000555555555bc5 <+25>:    mov    %edi,%ebx
   0x0000555555555bc7 <+27>:    lea    -0x1(%rdi),%edi
   0x0000555555555bca <+30>:    callq  0x555555555bac <func4>
   0x0000555555555bcf <+35>:    lea    (%rax,%r12,1),%ebp
   0x0000555555555bd3 <+39>:    lea    -0x2(%rbx),%edi
   0x0000555555555bd6 <+42>:    mov    %r12d,%esi
   0x0000555555555bd9 <+45>:    callq  0x555555555bac <func4>
   0x0000555555555bde <+50>:    add    %ebp,%eax
   0x0000555555555be0 <+52>:    pop    %rbx
   0x0000555555555be1 <+53>:    pop    %rbp
   0x0000555555555be2 <+54>:    pop    %r12
   0x0000555555555be4 <+56>:    retq   

...