Swift函数返回值 汇编实验存放在寄存器总结

函数返回值1~4个

rax 返回值1
rdx 返回值2
rcx 返回值3
r8 返回值4
movl $0x1, %eax
movl $0x2, %edx
movl $0x3, %ecx
movl $0x4, %r8d

函数返回值>=5个

返回值存在栈中rbp保存的地址附近

leaq -0x28(%rbp), %rax
rax保存栈底减掉算好需要的空间字节

movq $0x1, (%rax) 返回值1
movq $0x2, 0x8(%rax) 返回值2
movq $0x3, 0x10(%rax) 返回值3
movq $0x4, 0x18(%rax) 返回值4
movq $0x5, 0x20(%rax) 返回值5

=================低地址 rsp



(%rax) 返回值1
0x8(%rax) 返回值2
0x10(%rax) 返回值3
0x18(%rax) 返回值4
0x20(%rax) 返回值5
… 最后一个参数和栈底rbp之间有8个字节存放地址,地址值比rbp存储的地址多16个字节,作用未知
=================高地址 rbp

栈空间内存如下:参数1到5,最后一个是个地址,作用未知
x/6g 0x00007ffeefbff5f8
0x7ffeefbff5f8: 0x0000000000000001 0x0000000000000002
0x7ffeefbff608: 0x0000000000000003 0x0000000000000004
0x7ffeefbff618: 0x0000000000000005 0x00007ffeefbff630

地址比快出栈之前rbp地址多了16字节
register read rbp
rbp = 0x00007ffeefbff620

函数返回后用元组变量保存:
movq -0x28(%rbp), %rsi
movq -0x20(%rbp), %rcx
movq -0x18(%rbp), %rdx
movq -0x10(%rbp), %r8
movq -0x8(%rbp), %r9

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值