反匯編一個簡單的C程序
看了下網易雲課堂的《Linux內核分析》,第一節要求有一個簡單C程序得到匯編代碼,然後分析。只要明確每個匯編指令代表的含義,就可以容易的走下去,關鍵是要體會裡面的思想。
int g(int x){
return x+3;
}
int f(int x){
return g(x);
}
int main(){
return f(8)+1;
}
加載程序會從main開始執行,過程如圖(1)-(20),執行到“call f”時候 EIP=下一條指令地址=23(把保存在EIP中的下一條指令的地址壓棧;設置EIP為被調函數的入口地址,相當於pushl EIP, movel f,EIP )此時的狀態如圖(5)
接下來執行代碼塊f,執行到第15條指令到達 leave(相當於movl %ebp,%esp,popl %ebp)。最後main的ret會把CPU讓給其他的程序。