[英]Accessing stack frame on x86-64 architecture on Linux
采取以下代码:
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.