liminfo

ELF Format Reference

Linux ELF 파일 형식 레퍼런스

25개 결과

ELF Format Reference 소개

ELF 포맷 레퍼런스는 Linux, BSD 등 Unix 계열 운영체제에서 사용되는 ELF(Executable and Linkable Format) 바이너리 구조를 체계적으로 정리한 검색 가능한 가이드입니다. ELF 헤더(e_ident, e_type, e_machine, e_entry), 섹션(.text, .data, .bss, .rodata, .plt, .got), 세그먼트(PT_LOAD, PT_DYNAMIC, PT_INTERP, PT_GNU_STACK), 심볼 테이블(.symtab, .dynsym), 동적 링킹(DT_NEEDED, DT_RPATH, LD_PRELOAD), 재배치(JUMP_SLOT, GLOB_DAT, RELRO)를 다룹니다.

리버스 엔지니어, 보안 연구원, 시스템 프로그래머, 임베디드 개발자를 위해 설계되었으며, readelf, objdump, nm 명령어 예제와 C 구조체 정의를 함께 제공합니다. 악성코드 분석, 링커 문제 디버깅, 바이너리 내부 구조 학습 등 어떤 목적이든 ELF 스펙의 핵심 내용을 즉시 조회할 수 있습니다.

모든 콘텐츠는 브라우저에서 클라이언트 사이드로 렌더링되며 서버 처리가 없습니다. 다크 모드를 지원하고 데스크톱, 태블릿, 모바일에서 완벽하게 반응합니다.

주요 기능

  • e_ident, e_type, e_machine, e_entry 설명을 포함한 완전한 ELF 헤더 필드 레퍼런스
  • .text, .data, .bss, .rodata, .plt, .got 및 섹션 헤더 테이블 구조체를 다루는 섹션 레퍼런스
  • PT_LOAD, PT_DYNAMIC, PT_INTERP, PT_GNU_STACK 및 프로그램 헤더 구조체를 다루는 세그먼트 레퍼런스
  • STB_LOCAL, STB_GLOBAL, STB_WEAK 바인딩 유형을 포함한 .symtab 및 .dynsym 심볼 테이블 상세 정보
  • DT_NEEDED, DT_RPATH, DT_RUNPATH, LD_PRELOAD 후킹 예제를 포함한 동적 링킹 레퍼런스
  • R_X86_64_GLOB_DAT, R_X86_64_JUMP_SLOT, RELRO 보호 수준을 포함한 재배치 엔트리 레퍼런스
  • 모든 항목에 대한 readelf, objdump, nm, checksec 실전 명령어 예제
  • 헤더, 섹션, 세그먼트, 심볼, 동적 링킹, 재배치 카테고리별 필터링

자주 묻는 질문

ELF 바이너리 포맷이란 무엇인가요?

ELF(Executable and Linkable Format)는 Linux 및 Unix 계열 시스템에서 실행 파일, 공유 라이브러리, 오브젝트 파일, 코어 덤프에 사용되는 표준 바이너리 포맷입니다. ELF 파일은 매직 바이트(0x7F "ELF")로 시작하며, 파일 유형, 대상 아키텍처, 진입점, 링커와 로더가 사용하는 섹션/세그먼트 레이아웃을 기술하는 헤더를 포함합니다.

ELF 섹션과 세그먼트의 차이는 무엇인가요?

섹션(.text, .data, .bss, .rodata, .plt, .got)은 링크 타임에 코드, 데이터, 메타데이터를 조직하는 데 사용됩니다. 세그먼트(PT_LOAD, PT_DYNAMIC, PT_INTERP)는 런타임에 OS 로더가 바이너리를 메모리에 매핑하는 데 사용됩니다. 여러 섹션이 하나의 세그먼트로 그룹화될 수 있습니다. "readelf -S"로 섹션을, "readelf -l"로 세그먼트를 확인할 수 있습니다.

PLT와 GOT는 동적 링킹에서 어떻게 작동하나요?

PLT(Procedure Linkage Table, .plt)는 함수 호출을 리다이렉트하는 작은 코드 스텁을 포함하고, GOT(Global Offset Table, .got/.got.plt)는 외부 함수의 실제 해석된 주소를 저장합니다. 첫 번째 호출 시 동적 링커가 심볼을 해석하고 GOT 엔트리를 패치합니다(지연 바인딩). Full RELRO는 해석 후 전체 GOT를 읽기 전용으로 만들어 GOT 덮어쓰기 공격을 방지합니다.

readelf와 objdump로 ELF 파일에서 무엇을 볼 수 있나요?

"readelf -h"는 ELF 헤더(매직, 클래스, 타입, 진입점)를, "readelf -S"는 섹션 헤더를, "readelf -l"은 프로그램 헤더(세그먼트)를, "readelf -s"는 심볼 테이블을, "readelf -d"는 동적 섹션 엔트리를 표시합니다. "objdump -d"는 .text 섹션을 디스어셈블합니다. 바이너리 분석과 링커 문제 디버깅에 필수적인 도구입니다.

RELRO란 무엇이며 보안에 왜 중요한가요?

RELRO(Relocation Read-Only)는 보안 강화 기법입니다. Partial RELRO는 .got 섹션만 읽기 전용으로 만들고 .got.plt는 쓰기 가능합니다. Full RELRO는 시작 시 모든 동적 심볼을 해석하고 전체 GOT를 읽기 전용으로 만들어, 익스플로잇에 사용되는 GOT 덮어쓰기 공격을 방지합니다. "checksec binary"로 RELRO 상태를 확인할 수 있습니다.

LD_PRELOAD를 이용한 함수 후킹은 어떻게 하나요?

LD_PRELOAD는 다른 모든 공유 라이브러리보다 먼저 특정 라이브러리를 로드하게 하는 환경 변수입니다. 이를 통해 대상 바이너리의 어떤 함수든 오버라이드(후킹)할 수 있습니다. dlsym(RTLD_NEXT, "function_name")을 사용하면 커스텀 로직을 추가한 후 원래 함수를 호출할 수 있습니다. 디버깅, 프로파일링, 보안 연구에 활용됩니다.

ELF 심볼 바인딩 유형에는 어떤 것이 있나요?

ELF 심볼은 바인딩 유형을 가집니다: STB_LOCAL(오브젝트 파일 내부에서만 보임), STB_GLOBAL(모든 오브젝트 파일에서 보이며 고유해야 함), STB_WEAK(글로벌과 유사하지만 같은 이름의 글로벌 심볼로 오버라이드 가능). 심볼 타입에는 STT_FUNC(함수), STT_OBJECT(데이터), STT_SECTION(섹션), STT_FILE(소스 파일명)이 있습니다.

ELF 바이너리의 보안 속성을 어떻게 분석하나요?

"checksec binary"로 NX(PT_GNU_STACK을 통한 비실행 스택), RELRO 수준, 스택 카나리, PIE(위치 독립 실행 파일, e_type=ET_DYN), FORTIFY_SOURCE를 확인합니다. "readelf -d"로 RUNPATH/RPATH를 확인하고, "nm -D"로 동적 심볼을 나열합니다. 이러한 점검으로 바이너리의 공격 표면과 보안 강화 수준을 파악할 수 있습니다.