ELF 파일 포맷 정리

도영주 2013.05.04 00:43 조회 수 : 11536

1차 스터디에서 책읽으면서 같이 공부하다가 나온 내용을 정리해 보았습니다.

.note/.comment의 내용/ vmlinuz를 만드는 내용은 elf 파일 형식과 관련이 있더군요.



ELF 파일 포맷


ELF(Executable and Linkable Format) 은 실행 파일, object 코드, 공유 라이브러리, 그리고 코어 덤프의 파일 형식대한 공통 표준이다. System V Application Binary Interface 스펙에서 처음 발표되었고, 그후 Tool Interface Standard에서 발표되고, Unix system의 서로 다른 벤더에서 빠르게 사용되었다. 1999년에 86open project에 의해서 x86 기반의 Unix와 Unix-like system을 위한 표준 바이너리 파일로 선택되었다.

ELF 는 유연하고 확장성이 있는 설계를 갖고 있어 특정 Processor나 Architecture에 종속되지 않는다. 이것은 많은 서로 다른 플랫폼에 의해서 적용되었다.

파일 구조

ELF는 디스크에 저장된 프로그램 또는 프로그램의 조각을 저장하기 위한 형식으로 컴파일과 링킹의 결과로 생성된다. ELF 파일은 2 섹션으로 나누어진다. 실행파일의 경우, 코드를 위한 text 섹션, 전역 변수를 위한 data 섹션, 그리고 보통 문자열 상수가 포함된 rodata 섹션이 있다. ELF 파일은 memory 상에서 저장되어야만 하는 섹션을 어떻게 기술하는지를 나타내는 header를 포함한다.

541px-Elf-layout--en

.text실제 코드를 저장하는 섹션. objdump -drS .process.o로 볼 수 있다.
.data전역 테이블, 변수, 등을 저장하는 섹션. objdump -s -j .data .process.o는 이것을 hex 형식으로 덤프한다.
.bss파일에서 .bss의 bit을 찾지 말자. 왜냐하면 거기엔 아무것도 없기 때문이다. 초기화 되지 않은 배열과 변수가 거기에 있고, loader는 이들이 0으로 채워져야만 한다고 “알고 있다”. 이미 있는 곳 보다 더 많은 0을 디스크에 저장할 필요가 없기 때문이다.
.rodata프로그램의 문자열이 저장되는 섹션, 보통 링킹 과정에서 잊어버리면, 커널이 동작하지 않게 된다. objdump -s -j .rodata.process.o 는 hex 형식으로 덤프한다. 컴파일러에 따라, 이와 같은 섹션이 더 많을 수도 있다.
.comment & .note컴파일러/링커 툴체인에 의해서 입력되는 단순 커멘트
.stab & .stabstr디버깅 심볼과 이와 유사한 정보

자세한 내용은 아래 블로그에 올려놨으니 참고하시면 좋을 것 같습니다.


http://colso11.iptime.org/~asradad1/?p=169

번호 제목 글쓴이 날짜 조회 수
공지 [공지] 커널 스터디 관련 Q&A 게시판 입니다. [5] woos 2016.04.09 2194
1725 [잡담] O(1) 스케쥴러에서 [5] 박은병 2008.04.02 13742
1724 u-boot 분석 참고자료 file 구본규 2012.07.27 13313
1723 [추가] linux, busybox .config / build 방법 [4] file 구본규 2012.07.29 13177
1722 CFS 스케줄러 기초 정리 홍문화 2011.05.27 12874
1721 이클립스에서 ARM Linux 개발 툴 사용하기(DS-5) [1] file 와사 2013.08.15 12867
1720 x86 linux booting 과정 file 백창우 2007.02.23 12734
1719 [문의] linux device driver 개정 3판 가지고 계신분? [6] 맥주 2008.03.27 12442
1718 링크 레지스터 오프셋 [6] 정현철 2011.06.12 12360
1717 안녕하세요~ 소성은 입니다~ [5] file 소성은 2010.04.05 12159
1716 [문서] 커널 분석 문서입니다. file 맥주 2008.11.10 12087
1715 커널 소스 분석에 도움을 주는 도구들 구본규 2012.08.06 12006
1714 RealMode? ProtectedMode? [2] 김태훈91 2012.05.11 11951
1713 linux부팅과정 설명 문서 [3] file 이상철 2009.03.18 11768
» ELF 파일 포맷 정리 [6] 도영주 2013.05.04 11536
1711 [x86] fixed_addresses pororo 2012.03.04 11498
1710 kernel stack과 이를 이용하는 context_switch()사이의 연관성에 대한 질문 [11] 이종인 2011.05.27 11433
1709 memory map in powerpc kernel [1] file 김강년 2007.07.08 11267
1708 커널 스터디 6기 멤버 소개(arm-11 mp-core) 소개 페이지로 이동 예정 [4] 강진성 2010.03.24 11224
1707 리눅스 커널 초기화(ARM) 참고 자료 [2] file 유강희 2010.04.07 11221
1706 다들 주무시죠?? 자~ 질문입니다 ㅋ [4] 변유준 2007.06.16 11220
XE Login