단일 시스템 호출로 특징지어지는 무의미한 프로그램을 작성한다고 가정해 보겠습니다 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 라이브러리는 대부분의 시스템 호출을 지원합니다(그리고일반적인 시스템 호출 기능래핑되지 않은 일부 시스템 호출의 경우) 프로그램이 여기에 연결됩니다.