C 确定传递给函数的参数
以下是反汇编代码:C 确定传递给函数的参数,c,debugging,assembly,gdb,C,Debugging,Assembly,Gdb,以下是反汇编代码: => 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>: m
=> 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
=>0x08048d62:sub$0x2c,%esp
0x08048d65:lea 0x1c(%esp),%eax
0x08048d69:mov%eax,0xc(%esp)
0x08048d6d:lea 0x18(%esp),%eax
0x08048d71:mov%eax,0x8(%esp)
0x08048d75:movl$0x804a681,0x4(%esp)
0x08048d7d:mov 0x30(%esp),%eax
0x08048d81:mov%eax,(%esp)
0x08048d84:调用0x80488d0
0x08048d89:cmp$0x2,%eax
0x08048d8c:jne 0x8048d95
0x08048d8e:cmpl$0xe,0x18(%esp)
0x08048d93:jbe 0x8048d9a
0x08048d95:调用0x8049385
0x08048d9a:movl$0xe,0x8(%esp)
0x08048da2:movl$0x0,0x4(%esp)
0x08048daa:mov 0x18(%esp),%eax
0x08048dae:mov%eax,(%esp)
0x08048db1:调用0x8048d05
0x08048db6:cmp$0x25,%eax
0x08048db9:jne 0x8048dc2
0x08048dbb:cmpl$0x25,0x1c(%esp)
0x08048dc0:je 0x8048dc7
0x08048dc2:调用0x8049385
0x08048dc7:添加$0x2c,%esp
0x08048dca:ret
我知道大多数汇编指令的作用,但通过一些internet搜索,我知道func4中的参数是(x,0,14)
而且这些参数似乎存储在$esp中
我们如何知道根据汇编代码加载参数的位置?它总是用$esp吗?
从地址上看,它看起来像一个32位的系统。对于linux/x86,参数位于堆栈上,esp是帮助您检索参数的堆栈指针。您所询问的详细信息由体系结构的ABI定义。您可以通过研究为您的体系结构找到这一点。在x86上,参数通常被推送到堆栈上,但是x86有各种调用约定。