20145320GDB調試彙編堆棧過程分析

GDB調試彙編堆棧過程分析

  • 在這裏首先感謝盧肖明的分析博客,爲後面的同窗減小了不少分析的負擔。

分析過程

  • 使用gcc - g example.c -o example -m32指令在64位的機器上產生32位彙編,而後使用gdb example指令進入gdb調試器:sass

  • 進入以後先在main函數處設置一個斷點,再run一下,使用disassemble指令獲取彙編代碼,用i(info) r(registers)指令查看各寄存器的值:函數

  • 首先,結合display命令和寄存器或pc內部變量,作以下設置:display /i $pc,這樣在每次執行下一條彙編語句時,都會顯示出當前執行的語句。下面並不逐步顯示每一步時%esp、%ebp和堆棧內容的變化:

  • 即將執行call指令將下一條指令的地址入棧。調試

  • 下面列舉一下執行過程code

一樣作了一個表格顯示執行過程當中%ebp、%esp、堆棧值的變化博客

  • 隨着每次call新的函數,都要push %ebp,將ebp的值壓入堆棧(從而致使%esp每次減小4),目的是用於使用堆棧保存原函數的寄存器的值。每次執行完函數使用pop %ebp將保存在堆棧的值返回%ebp,此時%esp的值會每次加4。
相關文章
相關標籤/搜索