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를 포함한다.
.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
댓글 6
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
공지 | [공지] 커널 스터디 관련 Q&A 게시판 입니다. [5] | woos | 2016.04.09 | 2197 |
1485 | First.S, Second.S 분석한 자료 | 도영주 | 2013.08.03 | 1441 |
1484 | kernel 에서 실행 순서 관련 문서 | 도영주 | 2013.08.03 | 1880 |
1483 | 오늘 스터디 시간에 잠깐 찾은 second.S 분석 pdf [1] | 제한재 | 2013.07.27 | 1841 |
1482 | lilo 분석 참고 자료 | 시갈 | 2013.07.27 | 1463 |
1481 | 헷갈리는 주소, 포인터 연산에 대하여 정리( #, (), [] ) [2] | 시대유감 | 2013.07.20 | 3164 |
1480 | Register 관련 몇 가지 정리. | 도영주 | 2013.07.16 | 3244 |
1479 | 처음 어셈블리 해보시는데 할만하세요? [4] | 백창우 | 2013.07.08 | 1891 |
1478 | SVN 사용법 정리 [2] | 시대유감 | 2013.06.30 | 2135 |
1477 | 회식사진 투척합니다. [5] | 김택훈 | 2013.06.30 | 2291 |
1476 | 7장 소스1 | 시갈 | 2013.06.22 | 1415 |
1475 | 분석 관련 자료 [3] | 백창우 | 2013.06.15 | 1849 |
1474 | 리눅스 커널 분석 환경 [3] | 시대유감 | 2013.06.10 | 2023 |
1473 | 오늘 풀리지 않은 문제 관련 [1] | 이경욱 | 2013.06.02 | 3305 |
1472 | OS 커널의 구조와 원리 실습 방법 [1] | 시갈 | 2013.05.26 | 5696 |
1471 | 제안사항 입니다. [2] | 강정근 | 2013.05.07 | 3193 |
» | ELF 파일 포맷 정리 [6] | 도영주 | 2013.05.04 | 11543 |
1469 | TOZ 신청방법 아시는분?! [4] | 강정근 | 2013.04.29 | 2724 |
1468 | 안녕하세요. 빠른진행을 위해 어플로 접근성을 높여보아요^^ [1] | Napoleon | 2013.04.22 | 3583 |
1467 | 교제 및 장소(투표 종료) [14] | 조유준 | 2013.04.22 | 3838 |
1466 | 반갑습니다. 이성미입니다. [1] | 이성미 | 2013.04.22 | 3396 |
.
좋은 정리 감사합니다 ~_~