传递参数

i386

通过栈传递参数,而且是按照参数顺序从右向左依次入栈 old_rbp ret_addr <----- call function fill arg1 arg2

x86_64

linux user mode:

rdi rsi rdx rcx r8 r9 第七个及之后的按照参数顺序从右向左依次入栈

linux syscall:

rdi rsi rdx r10 r8 r9

WgcQv.png

Windows x64:

RCX, RDX, R8, R9, stack

x64 calling convention | Microsoft Learn

arm

参数 1 ~ 4 分别保存到 r0 ~ r3 寄存器中, 剩下的参数从右向左依次入栈, 被调用者实现栈平衡, 返回值存放在 r0 中

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/b89c1a49-acb1-4d1a-b475-a6213838db46/Untitled.png