시스템 호출 기능은 실행 파일에 어떻게 연결됩니까?

시스템 호출 기능은 실행 파일에 어떻게 연결됩니까?

단일 시스템 호출로 특징지어지는 무의미한 프로그램을 작성한다고 가정해 보겠습니다 open.

#include <fcntl.h> 

void main()
{
    int hi = open("does not exist", 0);
}

프로그램을 컴파일하고 ldd출력에 대한 명령을 실행하면 다음과 같은 결과가 나타납니다.

linux-vdso.so.1 (0x00007ffddd741000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f6835328000)
/lib64/ld-linux-x86-64.so.2 (0x00007f6835584000)

해당 링크만 인식 libc.so.6하고 다른 링크는 인식하지 못합니다.

이러한 다른 라이브러리 중 하나에 커널 시스템 호출이 포함되어 있습니까? 아니면 시스템 호출 기능이 정적으로 연결될 가능성이 있습니까? (있을 것 같지 않습니다).

답변1

시스템 호출은 함수로 직접 표시되지 않으며 함수처럼 연결되지도 않습니다. 각 아키텍처는 64비트 x86에서 시스템 호출을 호출하는 고유한 방법을 정의합니다.여기에는 특정 CPU 명령어가 포함됩니다.SYSCALL.

C 라이브러리는 대부분의 시스템 호출을 지원합니다(그리고일반적인 시스템 호출 기능래핑되지 않은 일부 시스템 호출의 경우) 프로그램이 여기에 연결됩니다.

프로그램에 연결된 다른 라이브러리는 다음과 같습니다.동적 링커그리고가상 DSO.

관련 정보