關於緩衝區到函數返回地址分析

用gdb調試可執行程序h(從附件下載h.tar.gz),計算緩衝區起始地址與函數foo返回地址的距離。調試過程

一,基本原理:
設置斷點表示將要執行的下一條指令 此時eip將會指向斷點處的指令
gdb中反彙編後結構

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章