请帮助,我已经看了一遍,我似乎无法找到任何东西。
Dump of assembler code for function phase_4:
0x08048d81 <+0>: push %ebp
0x08048d82 <+1>: mov %esp,%ebp
0x08048d84 <+3>: sub $0x28,%esp
0x08048d87 <+6>: lea -0xc(%ebp),%eax
0x08048d8a <+9>: mov %eax,0x8(%esp)
0x08048d8e <+13>: movl $0x8049a68,0x4(%esp)
0x08048d96 <+21>: mov 0x8(%ebp),%eax
0x08048d99 <+24>: mov %eax,(%esp)
0x08048d9c <+27>: call 0x8048788 <__isoc99_sscanf@plt>
0x08048da1 <+32>: cmp $0x1,%eax
0x08048da4 <+35>: jne 0x8048dac <phase_4+43>
0x08048da6 <+37>: cmpl $0x0,-0xc(%ebp)
0x08048daa <+41>: jg 0x8048db1 <phase_4+48>
0x08048dac <+43>: call 0x8049236 <explode_bomb>
0x08048db1 <+48>: mov -0xc(%ebp),%eax
0x08048db4 <+51>: mov %eax,(%esp)
0x08048db7 <+54>: call 0x8048b50 <func4>
0x08048dbc <+59>: cmp $0x262,%eax
0x08048dc1 <+64>: je 0x8048dc8 <phase_4+71>
0x08048dc3 <+66>: call 0x8049236 <explode_bomb>
0x08048dc8 <+71>: leave
0x08048dc9 <+72>: ret
Dump of assembler code for function func4:
0x08048b50 <+0>: push %ebp
0x08048b51 <+1>: mov %esp,%ebp
0x08048b53 <+3>: sub $0x18,%esp
0x08048b56 <+6>: mov %ebx,-0x8(%ebp)
0x08048b59 <+9>: mov %esi,-0x4(%ebp)
0x08048b5c <+12>: mov 0x8(%ebp),%ebx
0x08048b5f <+15>: mov $0x1,%eax
0x08048b64 <+20>: cmp $0x1,%ebx
0x08048b67 <+23>: jle 0x8048b83 <func4+51>
0x08048b69 <+25>: lea -0x1(%ebx),%eax
0x08048b6c <+28>: mov %eax,(%esp)
0x08048b6f <+31>: call 0x8048b50 <func4>
0x08048b74 <+36>: mov %eax,%esi
0x08048b76 <+38>: sub $0x2,%ebx
0x08048b79 <+41>: mov %ebx,(%esp)
0x08048b7c <+44>: call 0x8048b50 <func4>
0x08048b81 <+49>: add %esi,%eax
0x08048b83 <+51>: mov -0x8(%ebp),%ebx
0x08048b86 <+54>: mov -0x4(%ebp),%esi
0x08048b89 <+57>: mov %ebp,%esp
0x08048b8b <+59>: pop %ebp
0x08048b8c <+60>: ret
我一直在想有两个数字,其中一个是610,因为0x08048dbc&lt; + 59&gt;:cmp $ 0x262,%eax,0x262是610.
答案 0 :(得分:0)
如果查看传递给sscanf
的格式字符串,您很可能会看到一个%d
指令。行+32
检查sscanf
正好读取1个数字,否则炸弹会爆炸。
行+59
正在检查func4
对610
的返回值,因此您需要确定要提供的func4
号码,以便610
回来。
不要过多地告诉你,func4
是一个众所周知的序列的简单递归实现。您应该能够从汇编代码中找到递归公式,然后您可能会认出它。