20145224 第五周实验楼实践部分补充
第五周实验楼实践部分补充
源代码如下:
#include<stdio.h>
int g(int x)
{
return x + 3;
}
int f(int x)
{
return g(x);
}
int main(void)
{
return f(15) + 3;
}
查看汇编结果:
g:
pushl %ebp
movl %esp, %ebp
movl 8(%ebp), %eax //将15取出
addl $3, %eax //执行15 + 3
popl %ebp
ret
f:
pushl %ebp //分配新的栈空间
movl %esp, %ebp
pushl 8(%ebp) //将15重新入栈
call g //调用g函数
addl $4, %esp
leave
ret
main: //开始执行
pushl %ebp //设置新的帧指针
movl %esp, %ebp
pushl $15 //立即数15入栈
call f //调用f函数
addl $4, %esp
addl $3, %eax //返回值 + 3
leave
ret
使用gdb的bt/frame/up/down指令动态查看调用线帧的情况:
- 设置函数断点:
- 使用
d
查看汇编代码:
- 使用
i r
查看此时寄存器中的值: