스티븐 키트가 썼다https://unix.stackexchange.com/a/448943/674
ld.so
공유 ELF 객체이지만 인터프리터가 필요하지 않습니다(.interp 항목이 없음). 이것은 일반적인 라이브러리입니다(공유 실행 파일에는 항상 인터프리터가 필요합니다. 그렇지 않으면 동적이 아니라 정적입니다).
ELF 객체는 항목이 있는 경우에만 "공유 실행 파일"입니까 .interp
?
"공유 실행 파일"은 무엇을 의미합니까? "공유 라이브러리"와 같은가요?
아니면 "공유 실행 파일"은 "부분적으로 링크된 실행 파일"을 의미합니까? CSAPP에서
linux> gcc -o prog2l main2.c ./libvector.so
이는 런타임에 libVector.so와 연결될 수 있는 형태로 실행 가능한 개체 파일 prog2l을 생성합니다.
...로더가 실행 파일을 로드하고 실행할 때
prog2l
섹션 7.9에 설명된 기술을 사용하여 부분적으로 링크된 실행 파일을 로드합니다.prog2l
다음으로, 그 자체가 공유 객체인 동적 링커의 경로 이름을 포함하는 섹션prog2l
이 포함되어 있음을 확인합니다.interp
(예:ld-linux.so
Linux 시스템에서).
답변1
.interp 항목이 있는 경우에만 ELF 객체가 "공유 실행 파일"입니까?
엄밀히 말하면 아니오. 공유 라이브러리도 될 수 있기 때문입니다. 그러나 모든 "공유 실행 파일"(동적으로 링크됨)에는 ELF 유형에 관계없이 인터프리터 항목이 EXEC
있습니다 DYN
.
"공유 실행 파일"은 무엇을 의미합니까? "공유 라이브러리"와 같은가요?
아니요, 그것은 동일하지 않습니다. "동적으로 연결된 실행 파일"을 작성해야 합니다.
아니면 "공유 실행 파일"은 "부분적으로 링크된 실행 파일"을 의미합니까?
이것은 그것을 말하는 또 다른 방법입니다.