繁体   English   中英

在Linux上的x86-64体系结构上访问堆栈框架

[英]Accessing stack frame on x86-64 architecture on Linux

我试图在具有x86-64体系结构的Linux系统上访问不同的堆栈框架。 我可以访问所有帧的寄存器基址指针(rbp)。 现在,我想访问每个函数调用的参数。 我检查了该链接 ,该链接说前6个参数正在通过寄存器传递。 但是,据我了解,我只能通过读取寄存器来获取最顶层函数调用的参数。 但是,发送给其他函数的参数又如何(即,位于当前帧下方的堆栈帧)呢? 大概必须将它们存储在堆栈本身中的某个位置,但是我无法找到该位置。 有人可以帮忙解释一下吗?

非常感谢。

采取以下代码:

int f1(int a1, int a2, int a3) {
  return f2(2 * a1, 2 * a2, 2 * a3);
}

int f2(int a1, int a2, int a3) {
  return a1 + a2 + a3;
}

现在说我们调用f1():按照调用约定将其参数放入RDI,RSI和RDX。 然后,将每个寄存器乘以2并调用f2()。 这些寄存器被定义为保存呼叫者,但由于f1()将不再使用它们,因此无需保存它们。 因此,一旦进入f2(),我们就无法合​​理地期望有任何方法可以将原始参数传递给f1()。 它们根本不存在,并且无法恢复,因为即使是简单的操作(例如乘以2),也无法“撤消”(因为它可能已溢出)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM