linker script 소개

박상호 2010.07.26 09:06 조회 수 : 5872

토요일 스터디 모임에서 잠시나마 소개(?)를 했었던 링커 스크립트에 대해서 간략히 요약을 해 드리겠습니다.

링커 스크립트는 한마디로 말하면 object파일들의 각 영역에 대한 재정렬을 하는 스크립트라고 보시면 편하실 것입니다.

 

 더 자세히 공부해 보고 싶으시는 분들은 다음의 링크를 참조하시기 바랍니다. 한글 번역이 되어 있습니다. 잠시(?) 읽어보셈.. ^^;

http://korea.gnu.org/manual/release/ld/ld-mahajjh/ld_toc.html

 

  컴파일러가 컴파일을 하게되면 그 결과 파일이 object파일이 생긴다는 것은 잘 알고 계실것입니다.

이 각 object 파일들은 내부적인 어떤 포맷(보통 리눅스는 elf32,  윈도우는 coff 포맷을 가지고 있죠..)에 따라서

여러개의 섹션이란 녀석들을 가지고 있습니다. 대표적인 섹션이라면 코드 섹션(.text) 와 데이터 섹션(.data) 이 있습니다.

 

각 섹션들은 새롭게 빌드 과정에서 만들어 질수도 있고, 포맷별로 다른 이름을 가지고 있는 경우도 있죠. 컴파일러가

object파일을 만들면서 잘 분류를 해놓아서, 각 섹션에 차곡차곡 그 정보가 쌓여있게 되지요.

 

이후에 링커가 이들을 가지고 실행파일을 만드는 것을 이미 알고들 있으실터...

 

  일반적으로 링커는 내부정의된 링커 스크립트를 가지고 있고(default linker script), 이번에 봤던 임의의 스크립트를 연결해서 쓰는

경우도 있죠. 이 스크립트에 의해서 각 섹션을 다시 재 정렬 하는 녀석이 링커가 하는 역할이다라고 보시면 됩니다. 스크립트에 의해 마음대로 위치를 떡 주무르듯 할수가 있는 것이지요.

 

예를 들어보면, a.o에 (.text, .data)가 있고, b.o에 (.text, .data, .idata)가 있다고 하죠.

스크립트를 다음처럼 구성하면...
section {
 .text : { a.o(.text) } // a.o에서 .text 영역만을 .text 영역으로 구성하라!!
 .data : { *(.data) } // 모든 입력 파일에서의 .data 영역들을 가지고 .data 영역으로 구성하라!!
}

a.o에서 .text영역을 앞에두고, 모든 .data영역을 가지고 있는 입력 파일에서
차례대로 .data 영역을 읽어와 재구성을 하게 됩니다. 그 구성의 내용은

//////////////////////////////
//         a.o(.text)        //
//////////////////////////////
//         a.o(.data)        //
//         b.o(.data)        //
//////////////////////////////

가 되겠습니다. 여기서는 b.o의 .text 영역과 .idata여역은 스크립트에는 정의되지 않았기 때문에
최종 출력파일에는 b.o의 코드 영역은 들어갈수가 없습니다. 예로든 스크립트에
의해서 재정렬을 해보았지만, 결과 파일은 별 의미가 없는것 같군요.. ㅡㅡ;

 

한페이지 정도로 어떤 역할을 하는지 이해가 가셨으면 이번 글은 성공입니다.. ㅋㅋ

링커 스크립트에는 알수없는 외계(?)문자들이 많이 있으니 각 옵션을 알고 싶으신분은 위쪽 링크를 따라가셈...

 

번호 제목 글쓴이 날짜 조회 수
공지 [공지] MPSoC 스터디 관련 Q&A 게시판 입니다. woos 2016.04.09 240
105 제 연락처 번호가 바뀌었습니다. [1] 유광일 2010.10.01 2345
104 그동안 잘 쉬셨습니까~~? [3] Jason 2010.09.27 2510
103 둘째가 태어 났습니다. [5] myskan 2010.09.14 2622
102 회식 한번 하시죠 ~ [4] Jason 2010.08.25 2456
101 MPSoC 시뮬레이션이 가능한 툴 소개 합니다. ~~ [2] myskan 2010.08.23 2555
100 VMWARE용리눅스 이미지 전달 [7] Jason 2010.08.18 2870
99 mini soc 실험 해보신 분들 계신가요? 양현철 2010.08.17 2442
98 2차로 배포했던 cygwin환경이 이상해서 다시 올려드립니다. ^^ [4] file 양현철 2010.07.26 2537
» linker script 소개 [2] 박상호 2010.07.26 5872
96 스프링노트 개설되었습니다. [5] 황인천 2010.07.15 2629
95 MPSoC팀 트위터 리스트입니다. 양현철 2010.07.12 2703
94 [펌글] 창의성의 아이러니 [1] 유광일 2010.07.12 2748
93 infer_mux 디렉티브에 대해서... [4] 양현철 2010.07.06 3573
92 배포해드린 윈도용 파일에 약간 문제가 있습니다 (수정파일 첨부) 양현철 2010.06.26 2326
91 잠깐 중국에 다녀옵니다.. ^^ [1] 박상호 2010.06.25 2368
90 or1200_cpu.v 파일 (interconnection 주석 추가) [2] file Jason 2010.06.22 2721
89 줏어온 자료(openrisc core에 대한 간략한 설명자료) [1] file Jason 2010.06.21 2584
88 윈도우즈환경용 파일들 올려드립니다. [3] 양현철 2010.06.21 3167
87 대충 분석은 끝내고 파형까지 얻었네요. ^^;; [1] 양현철 2010.06.20 2558
86 우분투 환경이외에 환경 잡으신분 계신가요? 양현철 2010.06.13 2490
XE Login