深入理解程序设计使用Linux汇编语言

本文详细介绍了汇编语言中函数的工作原理,包括原函数、系统调用、栈的增长方向以及函数执行过程。重点讲解了参数入栈、局部变量分配、返回值存储、栈的恢复以及控制权的转移等关键步骤。同时,展示了不同栈图表示,帮助理解函数调用时内存布局的变化。
摘要由CSDN通过智能技术生成

**

关于函数

**
4.1
由系统提供的函数称为原函数(或源语)–因为其他一切都是建立在它们之上。
在汇编语言中,原语通常就是系统调用。

4.3
由于内存的结构,栈是从内存顶部开始向下增长的。当我们提到“栈顶”,请记住这是栈内存的底部。
movl (%esp), %eax :将栈顶的内容移入%eax
movl %esp, %eax :将%esp所含指针指向的值移入%eax
访问栈顶的下一个值:movl 4(%esp), %eax

函数开始执行时:
在这里插入图片描述
参数入栈
在这里插入图片描述
如果此时函数所需要的的所有局部变量需要两个字的内存
subl $8, %esp 指令可实现
在这里插入图片描述在这里插入图片描述
当一个函数执行完毕后,会做三件事:
1.将其返回值存储到%eax。
2.将栈回复到调用函数时的状态。
3.将控制权还给调用他的程序。
movl %ebp,%esp
popl %ebp
ret

.type power,@function这条指令告诉连接器应该将符号power作为函数处理。当程序只在一个文件中是可省略。

pushl %ebp
movl %esp,%ebp
subl $4,%esp
书上的栈图:
底数 <<<<<12(%ebp)
指数 <<<<<8(%ebp)
返回值 <<<<<4(%ebp)
旧%ebp <<<<<(%ebp) 当前栈底
当前结果 <<<<<-4(%ebp)和(%esp) 当前栈顶
OD的栈图(用intel汇编形式)
当前结果 <<<<< ebp-4和%esp 当前栈顶
旧%ebp <<<<< ebp 当前栈底
返回值 <<<<< ebp+4
指数 <<<<< ebp+8
底数 <<<<< ebp+12

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

vurtual

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值