공유 객체(.so)에 ASLR이 활성화되어 있는지 어떻게 알 수 있나요?

공유 객체(.so)에 ASLR이 활성화되어 있는지 어떻게 알 수 있나요?

.so에 대해 원하는 기본 주소가 비어 있지 않거나 로드에 실패하거나 동적 로더가 재배치를 수행하는 경우 어떻게 됩니까?

답변1

어떤 플랫폼에 대해 문의하고 있는지 명확하지 않으므로(예를 들어 Linux와 Windows는 모두 공유 라이브러리와 ASLR을 갖고 있으며 선호하는 주소와 관련된 몇 가지 유사한 문제가 있음) Linux라고 가정하겠습니다.

-fPIC모든 .so 파일은 ASLR이 가능하고 주소 0을 기반으로 하도록 컴파일되어야 합니다 . 하지만 모든 .so는 그럴 수 있습니다.프리링크시스템 관리자가 설정한 경우 로더는 고정 주소에서 .so를 로드하려고 시도하여 ASLR을 비활성화합니다. 이것이 사실인지 확인할 수 있습니다.

$ readelf -SW path/to/lib.so | grep prelink

사전 링크된 주소가 이미 사용된 경우 로더는 라이브러리를 다른 주소로 재배치합니다.

Windows DLL에는 다음과 같은 유사한 기능이 있습니다.선호하는 주소이전 버전에서는 기본적으로 활성화되어 있었지만, 내가 아는 한 더 이상 활성화되지 않습니다.

관련 정보