GDB调试汇编堆栈过程分析
代码如下:
使用gcc –S –o 20145315.s 20145315.c -m32编译
- 20145315.s文件如下:
删除gcc产生代码中以"."开头的编译器指令,分析汇编语言
保存%ebp,并设置新的帧指针
pushl $8分配4字节的栈空间
call调用f,f初始化帧指针,分配栈空间
在f中第六句call调用g,g被调用,初始化栈指针,分配栈空间,将%eax与立即数15相加,弹栈
执行ret返回f中call的调用位置
f结束,返回main中call调用的位置
main %eax加15
leave为返回准备栈,相当于%ebp出栈,最后ret结束
使用gdb example指令进入gdb调试器
- 进入之后先在main函数处设置一个断点,再run一下,使用disassemble指令获取汇编代码
- 用i(info) r(registers)指令查看各寄存器的值
- 调试过程如下: