링커, 로더, 실행 파일

ELF 파일에서 「섹션」과 「세그먼트」의 차이로 올바른 것은?

  1. A섹션은 Windows용, 세그먼트는 Linux용 호칭이며 내용은 같다
  2. B섹션은 링커가 다루는 세밀한 단위이고, 세그먼트는 로더가 메모리에 읽어 들이는 단위로서 권한이 같은 섹션을 묶은 것이다
  3. C세그먼트는 디스크에만 있고 메모리에는 읽어 들여지지 않는다
정답과 해설 보기

정답: B. 섹션은 링커가 다루는 세밀한 단위이고, 세그먼트는 로더가 메모리에 읽어 들이는 단위로서 권한이 같은 섹션을 묶은 것이다

ELF에는 두 가지 관점이 있습니다. 링커는 .text, .rodata, .data, .bss 등의 세밀한 섹션을 단위로 결합과 재배치를 수행합니다. 로더는 프로그램 헤더에 적힌 세그먼트를 단위로 메모리에 대응시키며, 예를 들어 읽기와 실행 세그먼트에 .text와 .rodata를, 읽기와 쓰기 세그먼트에 .data와 .bss를 모읍니다. 권한별로 모으면 페이지 단위의 보호를 설정하기 쉬워집니다.

  • A. 둘 다 ELF의 용어이며 역할이 다릅니다.
  • B. 올바릅니다. 링크를 위한 관점과 실행을 위한 관점입니다.
  • C. 세그먼트야말로 메모리에 읽어 들이는 단위입니다.
이 분야 연습하기 분야로 돌아가기

링커, 로더, 실행 파일의 다른 문제

  1. 메모리 페이지에 「쓰기 가능」과 「실행 가능」을 동시에 허용하지 않는(W^X, 쓰기와 실행의 분리) 것으로 막기 쉬워지는 공격은?
  2. Linux 공유 라이브러리에서 libfoo.so.1의 「.1」과 같은 soname의 버전 번호를 올리는 것은 일반적으로 어떤 경우인가?
  3. Linux에서 ldd 명령을 실행 파일에 사용하면 알 수 있는 것은?
  4. 주요 OS에서 사용하는 실행 파일 형식의 조합으로 올바른 것은?
  5. 재귀가 너무 깊어져 스택의 상한을 넘었을 때, Linux 등에서 일반적으로 일어나는 일로 올바른 것은?

이 분야의 비교