공유 라이브러리 파일의 주소는 가상 주소인가요, 아니면 재배치 가능한 주소인가요?

공유 라이브러리 파일의 주소는 가상 주소인가요, 아니면 재배치 가능한 주소인가요?

공유 라이브러리 파일의 주소는 가상 주소인가요, 아니면 재배치 가능한 주소인가요?

대답은 공유 라이브러리 파일이 GCC의 -fPIC 옵션을 사용하여 빌드되었는지 여부에 따라 달라 집니까?

에서 공유 객체 파일과 재배치 가능 파일의 차이점은 무엇입니까?

답변1

프로세스는 가상 주소 공간을 얻습니다. ELF 파일은 공유 객체를 포함하는 가상 주소 공간의 일부가 로드되는 가상 주소를 지정합니다. 이는 가상 주소가 됩니다.

섹션에는 로드 시간 재배치 중에 수정되는 위치 종속 주소를 가리키는 재배치 테이블이 있습니다. 여기에는 여러 가지 이유가 있지만 섹션의 모든 주소를 대상인 Relocatable 섹션에 재배치할 수 있다면 가능합니다. ELF를 생성하는 재배치 가능한 파일입니다. ELF는 실행 가능 객체나 공유 객체를 생성하기 위한 입력으로 사용될 수 있습니다.

공유 라이브러리는 ELF 공유 객체의 상위 계층으로 운영 체제가 로드될 때 동적 링커의 기능입니다. 프로세스의 가상 메모리 공간에 재배치된 주소를 다시 매핑합니다. 따라서 공유 라이브러리에는 재배치 가능한 세그먼트와 가상 주소가 모두 있습니다. 재배치 가능 주소를 호출하는 것은 실제로 주소를 재배치 가능하게 만드는 코드 세그먼트 및 관련 재배치 테이블이기 때문에 오해의 소지가 있습니다.

GCC -fPIC위치 독립적인 코드를 생성하여 재배치할 필요가 없습니다. 기능적으로 ELF 재배치 가능 파일은 위치 종속적이거나 독립적인 코드를 포함할 수 있습니다.

관련 정보