所以我在匯編中有以下代碼:

我知道該函式的引數是兩個(x 和 y 或任何字母)。問題是我不知道如何從匯編代碼中查看函式是否回傳任何內容,因為它只說ret. 這個函式會被認為是 void 還是 int?任何理解的解釋將不勝感激。
uj5u.com熱心網友回復:
兩者都是可能的。通常,您無法判斷是否要回傳一個值,或者不僅僅是查看函式的代碼。為了更加確定,查找呼叫此函式的函式并檢查這些函式是否檢查回傳值。如果其中任何一個有,則有一個回傳值。如果不是,則可能沒有回傳值。
uj5u.com熱心網友回復:
如果需要,回傳值在暫存器 eax / rax 中傳遞。
由于該暫存器被修改,首先從變數中讀取x,然后添加到另一個變數,這兩種情況都是可能的。在這種void情況下,eax暫存器可以包含任何值,不限于*x.
void f(int *x, int *y) {
*y = *x;
}
int g(int *x, int *y) {
int z = *x;
*y = z;
return z;
}
作為反例,
void h(int x, int *y) { *y = x; }
add
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/514012.html
標籤:Intel Collective 部件x86-64逆向工程属性
上一篇:程式集8086-無法推動兩個符號
