링커, 로더, 실행 파일

실행 파일에 strip 명령을 사용했을 때 일어나는 일로 올바른 것은?

  1. A기계어 명령이 최적화되어 실행이 빨라진다
  2. B실행 파일이 암호화되어 다른 사람이 실행할 수 없게 된다
  3. C심볼 테이블이나 디버그 정보가 제거되어 파일은 작아지지만, 디버거에서 함수 이름 등이 잘 보이지 않게 된다
정답과 해설 보기

정답: C. 심볼 테이블이나 디버그 정보가 제거되어 파일은 작아지지만, 디버거에서 함수 이름 등이 잘 보이지 않게 된다

실행 파일에는 함수나 변수의 이름을 나열한 심볼 테이블이나, 소스 코드의 줄과의 대응을 나타내는 디버그 정보가 포함되어 있을 수 있습니다. 이것들은 실행에는 필요 없으므로 strip으로 제거하면 파일이 작아집니다. 다만 결함을 조사할 때 함수 이름이나 줄 번호를 볼 수 없게 되므로, 제거하기 전의 정보를 따로 보관해 두기도 합니다. 동적 링크에 필요한 심볼은 남습니다.

  • A. 명령은 바뀌지 않으므로 속도도 변하지 않습니다.
  • B. 암호화는 하지 않습니다.
  • C. 올바릅니다. 실행에 필요하지 않은 정보를 깎아 냅니다.
이 분야 연습하기 분야로 돌아가기

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

  1. 링커에서 약한 심볼(weak symbol)의 취급으로 올바른 것은?
  2. C++ 컴파일러가 함수 이름에 인수 타입 등의 정보를 덧붙여 심볼 이름을 만드는 「이름 장식(맹글링)」의 주된 목적은?
  3. Linux의 dlopen 함수(Windows의 LoadLibrary에 해당)의 용도로 가장 적절한 것은?
  4. 100개의 프로세스가 같은 공유 라이브러리를 사용하고 있을 때, 물리 메모리 사용 방식으로 올바른 것은?
  5. 오브젝트 파일을 역어셈블했더니 외부 함수 printf를 호출하는 명령의 분기 대상이 0 같은 임시 값으로 되어 있었다. 이 값은 언제 올바르게 채워지는가?

이 분야의 비교