티스토리 뷰

목차

    반응형

    ELF 파일이란, 구조, 포맷, 분석, 생성 원리 (리눅스 커널 2.2 부터 지원)


    Executable and Linkable Format (ELF 파일)


    ELF

    - AT&T System V Unix 시스템에서 개발

    - 리눅스를 포함하여 거의 모든 UNIX계열의 Object 파일 및 실행 파일 표준 binary format

    - 리눅스 커널도 2.2 버전으로 오면서 ELF 파일 포맷을 지원하며, 커널의 이미지도 ELF 형태로 만들 수 있음


    ELF Header

    - ELF 파일 포맷임을 표시하는 magic number, 이미지의 형태(.o, exec, .so)

    - 실행되는 CPU 정보, Little-endian인지 Big-endian인지 표시하는 Byte 순서와 같은 파일 내용의 기본적인 정보 포함


    Program Header Table

    - 실행 파일의 메모리 구조 내용을 표시

    - EFL에서는 segment로 알려진 영역을 section으로 정의

    - 이 테이블에서는 어떠한 section이 존재하고 그 section의 정보가 있는 곳을 가지고 있음


    .text section

    - 실제로 CPU에서 수행되는 이진 기계 코드가 저장된 영역


    .data section

    - 프로그램이 실행될 때, 이미 초기화되어 있는 ELF 파일의 Data가 저장되어 있는 영역


    ELF 헤더 구조ELF 파일 헤더 구조


    .bss section

    - 프로그램이 실행될 때, 초기화 되어 있지 않지만, static이나 전역으로 선언된 변수가 위치하는 곳


    .symtab

    - 함수, 전역 변수, section의 이름 등이 저장된 영역

    - ELF 파일의 이 정보는 링커나 사람에게 필요한 정보이다


    ‰ .rel.txt

    - 동적 라이브러리의 경우 라이브러리의 코드가 여러 응용 프로그램의 메모리 영역에 연결되는데, 이때, 항상 같은 주소로 연결되지 않는다. 주소가 바뀔 때마다 .text section에서 변경되어야 할 정보를 저장하고 있음


    .rel.data

    - 동적 라이브러리의 경우 라이브러리의 코드가 여러 응용 프로그램의 메모리 영역에 연결되는데, 이때, 항상 같은 주소로 연결되지 않는다. 주소가 바뀔 때마다 .data section에서 변경되어야 할 정보를 저장하고 있음


    .debug section

    - 디버거에서 필요한 정보를 가지고 있음

    - gcc 컴파일러에서 –g 옵션을 주면 이 부분에 gdb와 같은 디버거에서 필요로 하는 정보를 이 부분에 생성


    위치 재설정의 개념


    ELF 위치 재설정의 개념ELF 위치 재설정의 개념


    ELF 파일이란, 구조, 포맷, 분석, 생성 원리 (리눅스 커널 2.2 부터 지원)

    반응형