没有合适的资源?快使用搜索试试~ 我知道了~
C语言的深度挖掘(二)
需积分: 3 4 下载量 76 浏览量
2010-06-26
15:12:01
上传
评论
收藏 213KB PDF 举报
温馨提示
试读
21页
C语言的深度挖掘(二)C语言的深度挖C语言的深度挖掘(二)掘(二)
资源推荐
资源详情
资源评论
C
C
语言的深度挖掘
语言的深度挖掘
(
(
二
二
)
)
栈与过程调用
西安电子科技大学计算机学院 李龙海
系统栈与过程调用
局部变量 var_main
参数 arg_A2 = 1
返回地址
其他信息
局部变量 var_A2
参数 arg_B2=3
返回地址
其他信息
局部变量 var_A1
局部变量 var_B2
….
局部变量 var_B1
….
栈底
栈顶
参数arg_A1= 2
参数 arg_B1=4
func_B
的栈帧
func_A
的栈帧
main
的栈帧
CPU对过程调用的支持
相关的寄存器:
1. ESP:存放一个指针,该指针指向系统栈最上面一个栈帧的
栈顶,即整个系统栈的栈顶。
2. EBP:存放一个指针,该指针指向系统栈最上面一个栈帧的
栈底,即当前栈帧的栈底。有时也被称为栈帧寄存器。
3. EIP:指令寄存器,存放一个指针,指向下一条等待执行的
指令地址。
相关的机器指令:
pop EIP ; ret
push EIP ; jmp operand;call operand
push EIP ; jmp Label ;call Label
mov operand, [ESP] ; add ESP, 1 ; pop operand
sub ESP, 1 ; mov [ESP], operand ;push operand
保存上层函数的
栈帧EBP
回收局部变量占
用的空间
为局部变量分配空间
参数y = 5
参数x = g
返回地址
上层函数的栈帧EBP
局部变量a
局部变量b
EBP
ESP
地址高端
地址低端
注:图中每个格都表示4个字节
一个小结论:
函数的参数都在EBP所指示的内存地址的正偏移处,函数内部
的局部变量都在EBP所指示的内存地址的负偏移处。
剩余20页未读,继续阅读
资源评论
astrotycoon
- 粉丝: 374
- 资源: 32
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功