x86-64指令系统过程调用学习笔记

这篇博客探讨了x86-64指令系统中过程调用的规则,包括参数如何通过寄存器rdi、r10、r11等传递,以及如何利用栈空间存放额外参数和局部变量。文章通过实例说明了栈指针rsp的调整,以及如何保护和使用寄存器。在函数返回时,如何恢复栈的状态并释放资源。
摘要由CSDN通过智能技术生成

x86-64的参数传递方式与返回地址的处理
x86-64的参数传递方式与返回地址的处理
过程中尽量用rax r10 r11,rdi之流用于传参,r12之流要现场保护才能用,因为他们是被调用者保护
x8664的寄存器使用约定

下面的图片都是例子啦啦啦啦
举个例子
如上图,由参数传递规定,a,&a,b,&b,c,&c在rdi等六个寄存器中保存,而d,&d在栈中保存,且在局部变量的下面
例子
如上图,左边粉红色是栈指针的移动,它会自己规划好要腾出多少空间,这里就是腾32,所以减32。与ia-32不同的,64不用处理rbp,只处理rsp。蓝色部分是将局部变量分配在栈中,先来先入,先来在下。绿色和黄色部分是6个参数之外的参数分配在栈中,和ia-32一样,参数入栈,后来先入

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值