링커, 로더, 실행 파일

실행 파일을 PIE(위치 독립 실행 파일)로 만드는 주된 이유는?

  1. A실행 파일을 어떤 OS에서도 실행할 수 있게 하기 위해
  2. B실행 파일 안에 모든 라이브러리를 포함시키기 위해
  3. C실행 파일 본체의 코드도 ASLR로 실행할 때마다 다른 주소에 놓을 수 있게 하기 위해
정답과 해설 보기

정답: C. 실행 파일 본체의 코드도 ASLR로 실행할 때마다 다른 주소에 놓을 수 있게 하기 위해

예전의 실행 파일은 정해진 주소에 읽어 들여진다는 전제로 만들어졌기 때문에, ASLR을 써도 라이브러리나 스택만 옮길 수 있었고 본체 코드의 주소는 공격자에게 알려져 있었습니다. PIE는 본체도 위치 독립 코드로 만들어 어디에 읽어 들여도 동작하게 한 것으로, 본체의 주소도 무작위로 할 수 있습니다. 현재 많은 Linux 배포판이 PIE를 기본으로 하고 있습니다.

  • A. OS의 차이를 흡수하는 것이 아닙니다.
  • B. 라이브러리를 포함시키는 것은 정적 링크입니다.
  • C. 올바릅니다. 주소가 고정이면 본체만 예측당할 수 있습니다.
이 분야 연습하기 분야로 돌아가기

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

  1. 프로그램을 시작할 때(Linux의 execve 등) OS의 로더가 하는 일로 올바른 것은?
  2. C 언어 프로그램에서 OS가 가장 먼저 실행을 시작하는 주소(엔트리 포인트)에 대한 설명으로 올바른 것은?
  3. C 언어의 main 함수가 「return 3;」으로 끝났을 때, 그 값 3은 일반적으로 어떻게 되는가?
  4. 실행 파일에 strip 명령을 사용했을 때 일어나는 일로 올바른 것은?
  5. 링커에서 약한 심볼(weak symbol)의 취급으로 올바른 것은?

이 분야의 비교