一、传参方法对比
1. 32位程序
-
系统调用 (Linux)
使用int 0x80
指令触发系统调用
寄存器传参顺序:
eax = 系统调用号
ebx = 第1个参数
ecx = 第2个参数
edx = 第3个参数
esi = 第4个参数
edi = 第5个参数
-
普通函数调用 (C语言)
栈传递参数:参数从右向左压栈
调用者负责清理栈空间(如cdecl
约定)
示例汇编:
push arg3 ; 最后1个参数先压栈
push arg2
push arg1
call function
add esp, 12 ; 清理栈
2. 64位程序
-
系统调用 (Linux)
-
使用
syscall
指令触发系统调用 -
寄存器传参顺序:
rax = 系统调用号 rdi = 第1个参数 rsi = 第2个参数 rdx = 第3个参数 r10 = 第4个参数 r8 = 第5个参数 r9 = 第6
-