최소 C 프로그램은 예상보다 더 많은 시스템 호출을 수행합니다.

최소 C 프로그램은 예상보다 더 많은 시스템 호출을 수행합니다.

나는 strace에 대해 더 많이 배우려고 노력하고 있습니다. 저는 ac 프로그램의 호출을 이해하기 위해 strace를 사용합니다. 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입니다.

관련 정보