linux - 是否可以将超过七个参数传递给 arm linux 中的系统调用?

标签 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 的最大参数数量。是否可以传递更多参数?

最佳答案

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

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

关于linux - 是否可以将超过七个参数传递给 arm linux 中的系统调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53903726/

相关文章:

linux - ansible 配置的 Ubuntu 错误

linux - 如何在 Linux 中将 cout 重定向到控制台?

linux - 无法使用 Alpine 和 Busybox docker 图像运行可执行文件

c - 关于内存管理中函数arch_get_unmapped_area的一个问题(linux)

multithreading - 线程安全与重入

java - 如何用 Jetty 修复 "Could not find necessary SLF4j logging jars"?

linux-kernel - 内核模块中的驱动程序代码不执行?

Linux 内核线程 - 调度程序

linux - 设备驱动程序代码编译?

linux - 为什么将getpid实现为系统调用?