反匯編一個簡單的C程序
反匯編一個簡單的C程序
看了下網易雲課堂的《Linux內核分析》,第一節要求有一個簡單C程序得到匯編代碼,然後分析。只要明確每個匯編指令代表的含義,就可以容易的走下去,關鍵是要體會裡面的思想。
int g(int x){
return x+3;
}
int f(int x){
return g(x);
}
int main(){
return f(8)+1;
}
![\](https://www.aspphp.online/bianchen/UploadFiles_4619/201701/2017012110305208.png)
加載程序會從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讓給其他的程序。
![\](https://www.aspphp.online/bianchen/UploadFiles_4619/201701/2017012110305242.jpg)
![\](https://www.aspphp.online/bianchen/UploadFiles_4619/201701/2017012110305385.jpg)