【发布时间】:2017-06-28 18:50:52
【问题描述】:
我知道如果在 C 中调用 fork() 会返回 -1 如果有错误,但我想知道当你在汇编中调用 sys_fork 时错误返回值是什么。
我通常会假设它也返回 -1,但我已经处理了 sys_brk 并且程序集中的原始系统调用返回了与 C Brk() 包装器不同的东西。
有谁知道汇编中的 fork 错误返回值是什么?
(我在 Linux 上做 64 位 NASM 汇编)
【问题讨论】:
-
IIRC,通常是 Linux 系统调用,至少在 ia32 和 x86_64 中,在失败时返回负的
errno值(然后 glibc 包装器再次否定并存储到errno)。跨度> -
根据x86_64 ABI,返回值在
EAX或RAX。另见Where is the X86-64 ABI documented? -
根据ABI,@jww,他知道返回值在
RAX。问题中说明了这一点。问题是如何解释RAX中的值。换句话说,它是什么意思? -
@Daniel Schepler 听起来你在说它会在失败时返回一些低于零的值,具体取决于遇到的错误类型。因此,如果我不关心到底出了什么问题,我可以这样做:“cmp rax, 0 (next line) jl sys_fork_error”?
-
@old_timer 就像它对 C fork() 系统调用所做的那样,它在子进程中返回 0,在父进程中返回 pid。但这是一个成功的调用。我不知道如何强制 fork() 失败并检查返回值。
标签: linux assembly x86-64 system-calls