토요일 스터디 모임에서 잠시나마 소개(?)를 했었던 링커 스크립트에 대해서 간략히 요약을 해 드리겠습니다.
링커 스크립트는 한마디로 말하면 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 |
65 | 내일 지각할꺼 같습니다. [2] | myskan | 2010.04.09 | 6137 |
64 | 토요일 좀 늦을것 같습니다. | 백창우 | 2010.04.08 | 5970 |
63 | 마이크로 프로세서 동영상 강의 [2] | 백창우 | 2010.04.06 | 9984 |
62 | 강의실 대실 알아봤는데요... [7] | 양현철 | 2010.04.06 | 7542 |
61 | 이제 한고비...... [3] | 이규희 | 2010.04.05 | 6954 |
60 | 좋은 한주 시작하셨나요? [4] | 신일미 | 2010.04.05 | 6526 |
59 | Verilog 책 소개... [1] | 상철 | 2010.04.05 | 11963 |
58 | 새로 시작하는 한주가 되길 바랍니다.. [2] | 박상호 | 2010.04.05 | 5988 |
57 | 스터디 전체 진행 방향 [3] | 백창우 | 2010.04.05 | 6006 |
56 | 도와주세요~ ^_^ [1] | 윤진훈 | 2010.04.05 | 5945 |
55 | 다들 잘 들어가셨습니까? [7] | 백창우 | 2010.04.04 | 5942 |
54 | 컴퓨터 구조 책 [2] | 윤진훈 | 2010.04.04 | 4927 |
53 | 다들 잘 들어가셨는지요. [2] | 양현철 | 2010.04.04 | 4622 |
52 | 첫 모임..... [4] | 이규희 | 2010.04.03 | 4938 |
51 | cell 게시판 정리 공지. [1] | 백창우 | 2007.12.02 | 10874 |
50 | 오늘부로 cell processor study는 종료되었습니다. [3] | 백창우 | 2007.12.01 | 9588 |
49 | arm11 linux kernel 세미나 요청이 들어왔네요. [1] | 백창우 | 2007.10.17 | 11771 |
48 | xen source 다운로드 주소입니다. [1] | 백창우 | 2007.10.08 | 12494 |
47 | fair scheduling. [1] | 백창우 | 2007.10.07 | 10511 |
46 | 최창훈님 요청하신 파일입니다. [1] | 원민수 | 2007.08.15 | 11789 |
.
감사함다~