最小的 C 程序执行的系统调用比预期多

最小的 C 程序执行的系统调用比预期多

我正在尝试了解更多有关 strace 的信息。我使用 strace 来理解 ac 程序所做的调用。 C程序是:

void
_start ()
{
  for (;;)
    {
    }
}

该程序被编译为

clang -nostdlib littletest.c

系统调用被跟踪

strace ./a.out

预期输出是。来源于 3:55

execve("./a.out", ["./a.out"], 0x7ffdf74a7720 /* 42 vars */) = 0 

实际输出是

execve("./a.out", ["./a.out"], 0x7ffdf74a7720 /* 42 vars */) = 0
brk(NULL)                               = 0x55a722f48000
arch_prctl(0x3001 /* ARCH_??? */, 0x7fff7444a540) = -1 EINVAL (Invalid argument)
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f85ea9b2000
arch_prctl(ARCH_SET_FS, 0x7f85ea9b2b00) = 0
set_tid_address(0x7f85ea9b2dd0)         = 10888
set_robust_list(0x7f85ea9b2de0, 24)     = 0
rseq(0x7f85ea9b34a0, 0x20, 0, 0x53053053) = 0
mprotect(0x55a722e3c000, 4096, PROT_READ) = 0

为什么有多个系统调用?

编辑1:

clang -nostdlib -static littletest.c

产生预期的输出。谢谢@ilkkachu

编辑2:

clang --version

铿锵版本 13.0.1

Edit3:
@Stephen Kitt 无需添加“-static”即可获得预期输出。他的 clang 版本也是 13.0.1。

相关内容