用gdb調試可執行程序h(從附件下載h.tar.gz),計算緩衝區起始地址與函數foo返回地址的距離。調試過程
一,基本原理:
設置斷點表示將要執行的下一條指令 此時eip將會指向斷點處的指令
gdb調試中設置斷點表示即將進入下一條的指令爲斷點處,即eip指向breakpoint處
strcpy(buffer,Lbuffer)表示從右至左壓入棧中所以Lbuffer會在高地址處
在函數調用時會先壓入返回地址,作業中也即在調用設置斷點處的寄存器中的值,所以foo返回地址的值也即是在設置斷點*(foo+0)之前在foo棧幀內壓入 下圖中設置爲$1; 或者在進入foo棧後獲取ebp的值利用ebp+4的值也即是foo返回地址
在調用strcpy函數時foo會將參數從右到左壓入棧中,此時設置斷點在調用strcpy後buffer下降設置成返回地址
二,主要步驟
1.反彙編兩個函數:
2.獲得調用前的值esp
3.獲得buffer地址並計算距離
附:驗證棧幀結構
三,使用到的基本gdb調試命令
1.進入gdb調試
gdb ./h
2.設置斷點
b *(foo+0)
b *(foo+21)
b *(foo+27)
3.運行
r
4.查看寄存器
i r
5.查看內容
x/x $esp
x/wx 0x0804****
x/4wx ** 顯示4個
6.退出
ctrl+z
YC,Ustc
附件地址:http://pan.baidu.com/s/1dDs6MNv