我目前无法计算出解决二进制炸弹第 4 阶段所需的第一个数字。我已经知道我需要两个整数 (%d %d) 并且我知道第二个整数是什么,但是我在使用第一个整数时遇到了麻烦。
这是第 4 阶段进入 func4 的部分。到目前为止,无论我为第一个 int 输入什么数字,我都会在 eax 中返回 352。如果我正确阅读代码,则需要将其与我认为是 1 的 0x8(%rsp) 进行比较。只需要在正确的方向上提供一点帮助!这与斐波那契数列有关吗?
0x0000000000401577 <+60>: call 0x401504 <func4>
0x000000000040157c <+65>: cmp %eax,0x8(%rsp)
0x0000000000401580 <+69>: jne 0x401587 <phase_4+76>
0x0000000000401582 <+71>: add $0x18,%rsp
0x0000000000401586 <+75>: ret
0x0000000000401587 <+76>: call 0x401a28 <explode_bomb>
0x000000000040158c <+81>: jmp 0x401582 <phase_4+71>
这是递归函数func4:
Dump of assembler code for function func4:
=> 0x0000000000401504 <+0>: mov $0x0,%eax
0x0000000000401509 <+5>: test %edi,%edi
0x000000000040150b <+7>: jle 0x40153a <func4+54>
0x000000000040150d <+9>: push %r12
0x000000000040150f <+11>: push %rbp
0x0000000000401510 <+12>: push %rbx
0x0000000000401511 <+13>: mov %edi,%ebx
0x0000000000401513 <+15>: mov %esi,%ebp
0x0000000000401515 <+17>: mov %esi,%eax
0x0000000000401517 <+19>: cmp $0x1,%edi
0x000000000040151a <+22>: je 0x401535 <func4+49>
0x000000000040151c <+24>: lea -0x1(%rdi),%edi
0x000000000040151f <+27>: call 0x401504 <func4>
0x0000000000401524 <+32>: lea (%rax,%rbp,1),%r12d
0x0000000000401528 <+36>: lea -0x2(%rbx),%edi
0x000000000040152b <+39>: mov %ebp,%esi
0x000000000040152d <+41>: call 0x401504 <func4>
0x0000000000401532 <+46>: add %r12d,%eax
0x0000000000401535 <+49>: pop %rbx
0x0000000000401536 <+50>: pop %rbp
0x0000000000401537 <+51>: pop %r12
0x0000000000401539 <+53>: ret