"LSB 실행 파일"(ET_EXEC)과 "LSB 공유 개체"(ET_DYN)의 차이점은 무엇입니까?

"LSB 실행 파일"(ET_EXEC)과 "LSB 공유 개체"(ET_DYN)의 차이점은 무엇입니까?

두 개의 파일을 사용하면 하나는 컴파일되고 링크되고 gcc다른 하나는 수동으로 사용 됩니다 nasm.ld

  • ELF 32비트 LSB 공유 객체...
  • ELF 32비트 LSB 실행 파일...

이 두 가지의 차이점은 무엇입니까? 내가 볼 수 있는 readelf -h

  • 유형:DYN (Shared object file)
  • 유형:EXEC (Executable file)

다음에서 이 기록을 볼 수 있습니다.ET_DYN다음을 위한 WikipediaET_EXEC. 둘 사이의 실질적인 차이점은 무엇입니까?

답변1

이는 위치 독립적 실행 파일(PIE)과 관련된 것으로 보입니다. GCC는 기본적으로 실행 파일을 컴파일할 때 PIE로 만들고 ELF 헤더의 출력 플래그를 ET_DYN.

다음을 사용하여 PIE 실행 파일 생성을 비활성화할 수 있습니다.

  • gcc -no-pie

이 내용이 표시되면 gcc 구성의 기본 옵션을 확인하면 gcc -v다음과 같은 내용이 표시됩니다 --enable-default-pie.

다음에서 영감을 받은 답변StackOverflow의 이 제출을 통해.여기서는 좀 더 활용해서 더 설명하겠습니다.

답변2

Linux 커널/동적 로더에서 ET_EXEC 및 ET_DYN의 주요 역할은 ASLR을 사용하여 실행 파일이 임의의 메모리 위치에 배치될 수 있는지 여부를 알리는 것 같습니다.

결론적으로 PIE 실행 파일은 공유 라이브러리처럼 무작위로 지정될 수 있기 때문에 DYN입니다.

나는 이것을 더 자세히 조사했고 다음과 같습니다.

관련 정보