다음을 참고하여 정리합니다.
https://ko.wikipedia.org/wiki/ELF_%ED%8C%8C%EC%9D%BC_%ED%98%95%EC%8B%9D
http://egloos.zum.com/recipes/v/5010841
http://devanix.tistory.com/182
ELF(Executable and Linkable Format)는 실행 파일, 목적 파일, 공유 라이브러리 그리고 코어 덤프를 위한 표준 파일 형식입니다.
하나의 ELf 헤더와 파일 데이터로 이루어지며 다음을 포함합니다.
- 0개 또는 그 이상의 세그먼트들을 정의하는 프로그램 헤더 테이블
- 0개 또는 그 이상의 섹션들을 정의하는 섹션 헤더 테이블
- 프로그램 헤더 테이블 또는 섹션 헤더 테이블의 엔트리들에 의해 참조되는 데이터
여기서 섹션과 세그먼트는 다음을 포함합니다.
- 섹션: 링킹과 재배치에 필요한 중요 정보를 포함
- 세그먼트: 파일의 런타임 실행에 필요한 정보를 포함
전체 파일의 어떤 바이트도 최대 1개의 섹션에 의해 소유되며, 섹션에 소유되지 않는 바이트도 존재할 수 있습니다.
위에서 기술한 프로그램 헤더 테이블과 섹션 헤더 테이블에 따라 ELf 파일은 두가지 관점을 가집니다. 프로그램 헤더는 런타임시 사용되는 세그멘트를, 섹션 헤더는 바이너리 섹션들의 집합을 나열합니다.
실제 헤더의 구조는 위키를 참고하세요.
이중 ELF header는 다음과 같은 형태이며 일부만 기술합니다.
(Offset, 길이, 의미 순서입니다)
- 0x00, 4, "0x7F 0x45 0x4C 0x45" 라는 매직넘버로 기술됩니다. ".ELF" 라는 의미 입니다.
- 0x04, 1, 비트 정보로, 64bit or 32bit 인지를 알려줍니다.
- 0x05, 1 , Big/Little Endian 구별을 해줍니다.
.text와 .rodata는
- .text: 실제 코드들이 들어갑니다. push, mov 등의 명령이 있습니다.
- .rodata: Read-only Data segment로 읽기만 가능한 데이터 영역입니다. static이나 const 같은 값이 들어갑니다.
헤더 이하의 해석은 Link 전(.o)과 후의 관점에 따라 아래와 같습니다.
자세한 설명은 http://egloos.zum.com/recipes/v/5010841 를 참고하면 되고, 대략적으로 저런 모양이구나 하는 것을 확실하게 알아두면 좋을 것 같습니다.
댓글 없음:
댓글 쓰기