以下是反汇编代码:
=> 0x08048d62 <+0>: sub $0x2c,%esp
0x08048d65 <+3>: lea 0x1c(%esp),%eax
0x08048d69 <+7>: mov %eax,0xc(%esp)
0x08048d6d <+11>: lea 0x18(%esp),%eax
0x08048d71 <+15>: mov %eax,0x8(%esp)
0x08048d75 <+19>: movl $0x804a681,0x4(%esp)
0x08048d7d <+27>: mov 0x30(%esp),%eax
0x08048d81 <+31>: mov %eax,(%esp)
0x08048d84 <+34>: call 0x80488d0 <__isoc99_sscanf@plt>
0x08048d89 <+39>: cmp $0x2,%eax
0x08048d8c <+42>: jne 0x8048d95 <phase_4+51>
0x08048d8e <+44>: cmpl $0xe,0x18(%esp)
0x08048d93 <+49>: jbe 0x8048d9a <phase_4+56>
0x08048d95 <+51>: call 0x8049385 <explode_bomb>
0x08048d9a <+56>: movl $0xe,0x8(%esp)
0x08048da2 <+64>: movl $0x0,0x4(%esp)
0x08048daa <+72>: mov 0x18(%esp),%eax
0x08048dae <+76>: mov %eax,(%esp)
0x08048db1 <+79>: call 0x8048d05 <func4>
0x08048db6 <+84>: cmp $0x25,%eax
0x08048db9 <+87>: jne 0x8048dc2 <phase_4+96>
0x08048dbb <+89>: cmpl $0x25,0x1c(%esp)
0x08048dc0 <+94>: je 0x8048dc7 <phase_4+101>
0x08048dc2 <+96>: call 0x8049385 <explode_bomb>
0x08048dc7 <+101>: add $0x2c,%esp
0x08048dca <+104>: ret
我知道大多数汇编指令的作用,但我通过一些互联网搜索知道func4中的参数是(x,0,14)
似乎参数存储在$ esp。
中我们如何知道基于汇编代码加载参数的位置?总是在$ esp吗?
答案 0 :(得分:0)
https://en.wikibooks.org/wiki/X86_Disassembly/Calling_Conventions 从地址来看,它看起来像一个32位系统。对于linux / x86,参数位于堆栈上,esp是堆栈指针,可帮助您检索它们。