Skip to content

⭐️ 7.4. Relocatable Object Files (ELF File Format)


DUMP#

  • ELF Header
    • magic byte: Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
    • magic byte 16바이트로 시작을 하는데, 그 안에는 얘가 ELF이다 라는 7f와 함께 워드크기, 바이트 정렬의 정보를 담고있다.
    • 그 뒤에는 링커가 목적파일을 읽을 때 사용되는 ELF Header 자체의 크기, 목적파일의 타입, 아키텍쳐 타입, Section Header Table의 파일 오프셋, 크기, 엔트리의 개수를 담고있다.
  • Section Header Table
    • 파일 마지막에 위치함. ELF Header와 함께 샌드위치처럼 섹션들을 가두고 있음.
    • 여러 섹션들의 위치와 그 크기를 저장하고 있음.
  • 섹션
    • .text: 컴파일된 프로그램의 바이너리 코드가 들어있음
    • .rodata: 읽기전용 데이터로, 등에 하드코딩 된 리터럴들이 들어있음. switch문의 점프테이블도 여기에 들어있대!
    • .data: 초기화된 전역변수와 정적변수들이 담겨있는 곳.
    • .bss: 초기화되지 않은 전역변수와 정적변수들이 담겨있는 곳. ELF 파일에는 실제로 존재하지는 않는 영역이지만 메모리에 올라갈 때 메모리 공간을 할당받는다.
    • .symtab: symbol table, 함수와 전역변수들이 정의된 곳.
    • [?] .rel.text: 다른 목적파일과 링크할 때 수정이 이루어질 .text 영역의 위치들의 리스트를 저장. ???????????
    • .rel.data: 다른 모듈에 정의되어 있는 전역변수들은 링크 전에는 단순히 그것이 있다 정도로만 선언되어있다. extern으로 선언된 함수나 변수들이 이에 들어감.
    • .debug: 디버그 정보들이 들어있는 섹션
    • .line: 디버그와 마찬가지로 라인 넘버가 들어있는 섹션
    • .strtab: 문자열 테이블, symtab이 참조함.
      Pasted image 20230908135524.png