Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 确定传递给函数的参数_C_Debugging_Assembly_Gdb - Fatal编程技术网

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有各种调用约定。