使用gcc - g example.c -o example -m32指令在64位的機器上產生32位彙編,而後使用gdb example指令進入gdb調試器:sass
進入以後先在main函數處設置一個斷點,再run一下,使用disassemble指令獲取彙編代碼,用i(info) r(registers)指令查看各寄存器的值:函數
即將執行call指令將下一條指令的地址入棧。調試
下面列舉一下執行過程code
一樣作了一個表格顯示執行過程當中%ebp、%esp、堆棧值的變化博客
push %ebp
,將ebp的值壓入堆棧(從而致使%esp每次減小4),目的是用於使用堆棧保存原函數的寄存器的值。每次執行完函數使用pop %ebp
將保存在堆棧的值返回%ebp,此時%esp的值會每次加4。