링커, 로더, 실행 파일

OS가 없는 마이컴에서 전원을 켠 직후, 시작 코드가 main을 호출하기 전에 수행하는 처리로 올바른 것은?

  1. A.text의 기계어를 모두 RAM에서 플래시로 되돌려 쓴다
  2. BRAM의 내용을 읽어 내어 지난번 전원이 꺼질 때의 변수 값을 복원한다
  3. C.data의 초깃값을 플래시에서 RAM으로 복사하고, .bss 영역을 0으로 채운다
정답과 해설 보기

정답: C. .data의 초깃값을 플래시에서 RAM으로 복사하고, .bss 영역을 0으로 채운다

전원을 끄면 RAM의 내용은 사라지므로, 초깃값이 있는 변수의 값은 바뀌지 않는 플래시에 저장해 두고 시작 코드가 RAM 상의 변수 위치로 복사합니다. 초깃값이 없는 변수의 영역(.bss)은 0으로 채웁니다. 링커 스크립트에서는 .data에 대해 「플래시에 놓는 주소」와 「실행 시 RAM에서 사용하는 주소」를 따로 지정합니다. 이것들을 마친 뒤에야 C 언어의 약속대로의 상태에서 main을 시작할 수 있습니다.

  • A. 되돌려 쓰는 일은 하지 않습니다.
  • B. 보통의 RAM 내용은 전원을 끄면 사라집니다.
  • C. 올바릅니다. C 언어의 초깃값 약속을 지키기 위한 처리입니다.
이 분야 연습하기 분야로 돌아가기

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

  1. ELF 파일에서 「섹션」과 「세그먼트」의 차이로 올바른 것은?
  2. 메모리 페이지에 「쓰기 가능」과 「실행 가능」을 동시에 허용하지 않는(W^X, 쓰기와 실행의 분리) 것으로 막기 쉬워지는 공격은?
  3. Linux 공유 라이브러리에서 libfoo.so.1의 「.1」과 같은 soname의 버전 번호를 올리는 것은 일반적으로 어떤 경우인가?
  4. Linux에서 ldd 명령을 실행 파일에 사용하면 알 수 있는 것은?
  5. 주요 OS에서 사용하는 실행 파일 형식의 조합으로 올바른 것은?

이 분야의 비교