【问题标题】:Can more than seven arguments be passed to system call in arm linux?在arm linux中可以将超过七个参数传递给系统调用吗?
【发布时间】:2019-05-23 01:03:30
【问题描述】:

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

【问题讨论】:

  • 如果您需要传递更多信息,请使用结构或数组。

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


【解决方案1】:

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

对于正常的过程调用,堆栈总是在那里,所以参数的最大数量不是问题。

【讨论】:

    猜你喜欢
    • 2011-08-11
    • 2012-07-19
    • 1970-01-01
    • 1970-01-01
    • 2017-08-25
    • 2010-10-16
    • 2015-12-01
    • 2020-07-30
    相关资源
    最近更新 更多