可以在arm linux中将七个以上的参数传递给系统调用吗?

时间:2018-12-23 12:47:01

标签: linux linux-kernel operating-system arm system-calls

在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。是否可以传递更多参数?

1 个答案:

答案 0 :(得分:0)

对于系统调用,传递超过3-4个参数通常是一个加号。在将参数传递给系统调用时使用寄存器的原因通常是,在切换到内核模式时,您更改了堆栈,因此必须使用效率低下的方法来访问存储在用户堆栈中的参数。当您需要传递比7个寄存器更多的信息时,通常会传递一个指向具有所有信息的结构的指针(可能您已经在使用的系统中通过一些系统调用看到了此信息)

对于常规过程调用,堆栈始终在其中,因此最大参数数量不是问题。