20191302反彙編測試
阿新 • • 發佈:2021-11-06
反彙編測試
測試程式碼
#include<stdio.h>
int g(int x){
return x+3;
}
int f(int x){
int i = 02;
return g(x)+i;
}
int main(void){
return f(8)+1;
}
用gcc在64位機器上編譯一個32位的程式,遇到報錯
- 解決辦法:安裝multilib庫
sudo apt-get install gcc-multilib
sudo apt-get install g++-multilib
使用gcc - g week20191302.c -o week1302 -m32
進行編譯,使用gdb week1302
進入gdb
在main函式設定斷點,再run一下,使用disassemble指令獲取彙編程式碼,用i r指令檢視各暫存器的值:
可見此時主函式的棧基址為0xffffd108,用x檢視其值為0。
使用指令display /i $pc
,單步執行並顯示%esp和%ebp的值。
- 可見8被壓入了棧中,同時esp減少了4
使用si命令,進入f函式
單步執行彙編程式碼
call指令將下一條指令的地址入棧,進入g函式
g函式運算完成後,ret返回f函式
f函式運算完成後,ret返回main函式
最終結果被寫入eax暫存器中
f函式的彙編程式碼
- 在紙上畫出f中每一條語句引起的eip(rip),ebp(rbp),esp(rsb),eax(rax)的值和棧的變化情況