函数返回值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