Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 系统调用:中的最大参数_C_Linux_Arguments_System Calls - Fatal编程技术网

C 系统调用:中的最大参数

C 系统调用:中的最大参数,c,linux,arguments,system-calls,C,Linux,Arguments,System Calls,在一个系统调用中可以传递多少个参数? 我检查了内核文件/asm/unistd.h,没有看到包含超过4个参数的系统调用。这取决于您使用的体系结构。对于i386,在系统调用号旁边最多有6个参数 从中,您将系统呼叫号码传递到的寄存器: arch/ABI instruction syscall # retval Notes ─────────────────────────────────────────────────────────────────── arm/OABI

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

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

从中,您将系统呼叫号码传递到的寄存器:

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     -

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