【问题标题】:System call : maximum arguments in系统调用:最大参数
【发布时间】:2014-08-20 07:08:54
【问题描述】:

一个系统调用可以传递多少个参数? 我检查了内核文件 /asm/unistd.h 并没有看到包含超过 4 个参数的系统调用。

【问题讨论】:

  • 在实际的系统调用上不重要吗?有些需要更多参数,有些需要更少,有些不需要。
  • 为什么要使用超过 4 个参数的系统调用?
  • @KlasLindback:你错了。内核和用户空间之间的系统调用协议(通过 VDSO 或 SYSENTER 机器指令)不是 ABI 调用约定。在 x86 上,系统调用不会在堆栈上传递任何东西,只会通过寄存器。

标签: c linux arguments system-calls


【解决方案1】:

这取决于您使用的架构。对于 i386,系统调用号旁边最多有 6 个参数。

来自syscall(2),你传递系统调用号的寄存器:

arch/ABI   instruction          syscall #   retval Notes
───────────────────────────────────────────────────────────────────
arm/OABI   swi NR               -           a1     NR is syscall #
arm/EABI   swi 0x0              r7          r0
blackfin   excpt 0x0            P0          R0
i386       int $0x80            eax         eax
ia64       break 0x100000       r15         r10/r8 bool error/
                                                  errno value
parisc     ble 0x100(%sr2, %r0) r20         r28
s390       svc 0                r1          r2     See below
s390x      svc 0                r1          r2     See below
sparc/32   t 0x10               g1          o0
sparc/64   t 0x6d               g1          o0
x86_64     syscall              rax         rax

论据:

arch/ABI   arg1   arg2   arg3   arg4   arg5   arg6   arg7
──────────────────────────────────────────────────────────
arm/OABI   a1     a2     a3     a4     v1     v2     v3
arm/EABI   r0     r1     r2     r3     r4     r5     r6
blackfin   R0     R1     R2     R3     R4     R5     -
i386       ebx    ecx    edx    esi    edi    ebp    -
ia64       out0   out1   out2   out3   out4   out5   -
parisc     r26    r25    r24    r23    r22    r21    -
s390       r2     r3     r4     r5     r6     r7     -
s390x      r2     r3     r4     r5     r6     r7     -
sparc/32   o0     o1     o2     o3     o4     o5     -
sparc/64   o0     o1     o2     o3     o4     o5     -
x86_64     rdi    rsi    rdx    r10    r8     r9     -

【讨论】:

    猜你喜欢
    • 2014-12-03
    • 2014-04-22
    • 2011-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-19
    相关资源
    最近更新 更多