1. 程式人生 > 其它 >20191302反彙編測試

20191302反彙編測試

反彙編測試

測試程式碼

#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)的值和棧的變化情況