在arm linux(EABI)中,系统调用号在r7中传递,并且参数可以在r0-r6寄存器中传递
(syscall(2))中的下表显示了用于传递系统调用的寄存器 争论。
arch/ABI arg1 arg2 arg3 arg4 arg5 arg6 arg7 Notes
──────────────────────────────────────────────────────────────
alpha a0 a1 a2 a3 a4 a5 -
arc r0 r1 r2 r3 r4 r5 -
arm/OABI a1 a2 a3 a4 v1 v2 v3
arm/EABI r0 r1 r2 r3 r4 r5 r6
我很好奇,是否可以在系统调用中传递给arm linux的最大参数数是7。是否可以传递更多参数?
答案 0 :(得分:0)
对于系统调用,传递超过3-4个参数通常是一个加号。在将参数传递给系统调用时使用寄存器的原因通常是,在切换到内核模式时,您更改了堆栈,因此必须使用效率低下的方法来访问存储在用户堆栈中的参数。当您需要传递比7个寄存器更多的信息时,通常会传递一个指向具有所有信息的结构的指针(可能您已经在使用的系统中通过一些系统调用看到了此信息)
对于常规过程调用,堆栈始终在其中,因此最大参数数量不是问题。