[英]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.