簡體   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