"init"이 커널을 로드한 후 시작되는 첫 번째 프로세스라는 것을 알고 있지만 나에게는 모호한 점이 있습니다. 프로세스인 경우 바이너리 실행 파일이 있어야 합니다. 그러나 아래의 공유 객체는 실행 파일처럼 보이지만 주요 기능이 없는 컴파일된 코드입니다.
sardari@mint / $ file /sbin/init
/sbin/init: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=7a4c688d009fc1f06ffc692f5f42ab09e68582b2, stripped
분명히 공유 객체는 실행 파일일 수 있습니다. 그런데 왜 그럴까요?
답변1
사용할 때 -pie
(위치 독립적 실행 파일) 예를 들어:
gcc -pie -fPIC hello.c
그렇다면 당신은:
#file ./a.out
a.out: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=0x2afb7892000a1dc5b9010c591b75987188aa2d66, stripped
더 많은 정보가 필요하시면 방문해보세요위치 독립적 코드