本人最近正在學習調試技術,此處對棧溢出做一些總結。 gdb的基本使用就不多扯了。 主要針對發行在外的release版本的軟體出現問題時的調試。 我發現,只要源碼相同,在gdb的命令行下或者開啟gdb時,指定的可執行文件是debug版的,是可以顯示出正確的符號信息的。這個大大地提高了調試效率。 一般來 ...
本人最近正在學習調試技術,此處對棧溢出做一些總結。
gdb的基本使用就不多扯了。
主要針對發行在外的release版本的軟體出現問題時的調試。
我發現,只要源碼相同,在gdb的命令行下或者開啟gdb時,指定的可執行文件是debug版的,是可以顯示出正確的符號信息的。這個大大地提高了調試效率。
一般來講,查看堆棧就是使用bt,這個時候加上bt full會讓你更加滿意,因為這裡面可以顯示出局部變數信息。
另一點是查看寄存器中的值,主要是sp和ip。指令:i r
查看記憶體信息,指令x。x/???這個?代表某種格式,比如x/10xw $sp以十六進位顯示棧指針開始的地址10個位元組的內容。
i files這個指令可以查看當時文件載入到記憶體時的映射信息,這對查看棧溢出很有作用,棧這個段一般位於最後面,棧底和sp指針一對比基本就知道是否發生棧溢出了。