0
sample:
pushq   %rbp
movq    %rsp, %rbp

movl    %edi, -20(%rbp)
movl    $1, -16(%rbp)
movl    $0, -12(%rbp)
movl    $0, -8(%rbp)
cmpl    $2, -20(%rbp)

让我们说输入值为 1 将 1 设置为 %rbp 或 %rsp

比 %edi 的价值是多少

4

1 回答 1

2

让我们一步一步来:

  • 该函数sample首先设置一个堆栈帧:pushq %rbp; movq %rsp, %rbp
  • 它保存edi在堆栈上:movl %edi, -20(%rbp). rsp如果它是叶函数,则无需显式递减即可。
  • 它在堆栈上放置了更多立即数:movl $1, -16(%rbp); movl $0, -12(%rbp); movl $0, -8(%rbp).
  • edi它将堆栈上的保存值-20(%rbp)与 2 进行比较。假设它基于该比较做了一些事情(可能其余代码是相关的),函数的输入必须是edi.

另一种解决方法是AMD64 ABI,它指定rdi用于将第一个参数传递给函数。然后,您可以进一步推断第一个参数sample是一个 32 位宽的整数。

于 2012-11-05T02:55:04.467 回答