BLOG
Tracefield · 02
Tracefield · 01
블로그 · 14
Vibe Audit · 04
Vibe Audit · 03
Vibe Audit · 02
Vibe Audit · 01
출판편집자 · 01
StudyTree · 01
SecurityOps · 02
SecurityOps · 01
AI챗봇 · 04
AI챗봇 · 03
AI챗봇 · 02
AI챗봇 · 01
퍼플심 · 04
퍼플심 · 03
퍼플심 · 02
퍼플심 · 01
블로그 · 13
rootscan · 07
rootscan · 06
블로그 · 12
블로그 · 11
블로그 · 10
블로그 · 09
블로그 · 08
블로그 · 07
블로그 · 06
블로그 · 05
블로그 · 04
블로그 · 03
블로그 · 02
블로그 · 01
rootscan · 05
rootscan · 04
rootscan · 03
asmspeak · 03
asmspeak · 02
rootscan · 02
asmspeak · 01
rootscan · 01
웹보안도구 · 02
웹보안도구 · 01
루트캠프 · 02
루트캠프 · 01
All notes 167
ELF(Executable and Linkable Format) 파일 구조
리눅스에서 실행 파일, 오브젝트 파일(.o), 공유 라이브러리(.so)는 대부분 ELF 형식을 따른다. 바이너리를 읽을 때는 이 구조를 알아야 어디부터 봐야 할지 감이 잡힌다.
1. ELF 헤더(Header)
ELF 헤더는 파일 맨 앞에 있고, 아키텍처, 엔디안, 진입점 같은 기본 정보를 담고 있다. readelf -h로 바로 확인할 수 있다.
$ readelf -h ./hello
Entry point address: 0x401000
Entry Point는 프로그램이 메모리에 올라간 뒤 가장 먼저 실행될 주소다. 정적 분석을 시작할 때 가장 먼저 보는 지점 중 하나다.
2. 섹션(Section)과 세그먼트(Segment)
섹션과 세그먼트는 비슷해 보여도 보는 관점이 다르다.
- 섹션(Section):
.text,.data처럼 논리적 역할 기준으로 나눈 단위다. 링킹에서 중요하다.readelf -S로 본다. - 세그먼트(Segment): 운영체제가 메모리에 올릴 때 쓰는 단위다. 권한이 비슷한 섹션을 묶어서 관리한다.
readelf -l로 본다.
3. 주요 섹션과 권한
분석할 때 자주 보는 핵심 섹션은 아래 정도다.
.text: 실행 코드가 들어간다. 보통 읽기와 실행 권한만 있다..data: 초기화된 전역 변수가 들어간다. 읽기와 쓰기 권한이 있다..rodata: 상수 문자열 같은 읽기 전용 데이터가 들어간다.
최근 운영체제는 data, stack, heap 같은 데이터 영역에서 코드가 실행되지 않도록 NX 비트를 두는 경우가 많다. 실행 권한을 줄이는 기본 방어선이라고 보면 된다.

