在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 的最大参数数量。是否可以传递更多参数?
最佳答案
对于传递超过 3-4 个参数的系统调用通常是一个加号。在向系统调用传递参数时使用寄存器的原因是,通常在切换到内核模式时,您会更改堆栈,因此您必须使用效率低下的方式访问存储在用户堆栈中的参数。当你需要传递超过 7 个寄存器的信息时,你通常会传递一个指向包含所有信息的结构的指针(可能你已经在你使用的系统中的一些系统调用中看到了这一点)
对于正常的过程调用,堆栈始终存在,因此参数的最大数量不是问题。
关于linux - 是否可以将超过七个参数传递给 arm linux 中的系统调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53903726/