Это фаза_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