objdump — 보안 분석 및 진단
최신 도구 가이드 / 보안 분석 및 진단 / objdump.html
실행 파일과 오브젝트 파일의 섹션·심볼·디스어셈블을 출력하는 GNU binutils 기본 도구입니다.
기본 정보
| 프로그램 이름 | objdump (옵덤프) |
|---|---|
| 한 줄 소개 | 실행 파일과 오브젝트 파일의 섹션·심볼·디스어셈블을 출력하는 GNU binutils 기본 도구입니다. |
| 개발·유지 | GNU Project (binutils) |
| 공식 홈페이지 | https://www.gnu.org/software/binutils/ |
| 공식 문서 | https://sourceware.org/binutils/docs/ |
| 공식 다운로드 | https://ftp.gnu.org/gnu/binutils/ |
| 지원 운영체제 | Linux, macOS, Windows (MinGW 등 툴체인) |
| 라이선스 | GPL-3.0-or-later |
| 안정 버전 | binutils 2.46 계열 (2026-02 공개) — 확인일 2026-10-18 |
| GitHub 저장소 | https://sourceware.org/git/binutils-gdb.git |
| 분류 | 보안 분석 및 진단 (태그: 디스어셈블, 오브젝트 파일, ELF 분석) |
이 프로그램은 무엇인가?
objdump는 GNU binutils에 포함된 명령줄 도구로, 실행 파일·오브젝트 파일(.o)의 섹션 목록, 심볼 테이블, 디스어셈블 코드를 사람이 읽을 수 있게 출력합니다.
컴파일 결과물이 의도대로 만들어졌는지(심볼이 남아 있는가, 어떤 라이브러리를 연결했는가)를 점검할 때, 그리고 라이브러리 오류로 인한 링크 문제를 추적할 때 기본 도구로 쓰입니다. gcc로 만든 서버 프로그램을 점검하는 서버 관리자에게도 익숙한 이름입니다.
어떤 문제를 해결하는가?
- 빌드한 실행 파일·오브젝트 파일이 올바른 구조인지 확인해야 할 때.
- 크래시 로그의 주소가 어느 함수·어느 코드 라인인지 좁혀야 할 때.
- 바이너리에 어떤 심볼·섹션이 남아 있는지 점검해야 할 때 (디버그 심볼 제거 여부 등).
- GDB 없이 파일 단위로 디스어셈블 결과를 문서·리포트로 남겨야 할 때.
주요 기능
섹션·헤더 정보
-h 옵션으로 섹션 목록과 크기·플래그를 출력합니다.
- 활용 상황: ELF 파일의 .text, .data, .bss 구성을 확인합니다.
- 얻는 결과: 섹션 배치와 크기를 표로 얻습니다.
- 제한 사항: 심층 분석에는 readelf·GDB가 더 상세한 정보를 제공합니다.
디스어셈블
-d 옵션으로 지정 섹션을 기계어→어셈블리로 변환합니다.
- 활용 상황: 크래시 난 주소 근처 코드를 확인합니다.
- 얻는 결과: 해당 주소의 어셈블리 명령과 심볼 라벨을 얻습니다.
- 제한 사항: 수백만 줄 출력이 될 수 있어 grep·less 파이프가 필수적입니다.
심볼 테이블 출력
-t로 심볼 목록, -T로 동적 심볼을 출력합니다.
- 활용 상황: 동적 링크 대상(라이브러리 함수)을 확인합니다.
- 얻는 결과: undefined 심볼 여부로 링크 오류 원인을 좁힙니다.
- 제한 사항: stripped 바이너리는 심볼이 거의 없어 제한적입니다.
소스 혼합 표시
-S 옵션으로 디버그 정보가 있으면 소스 코드와 섞어 보여 줍니다.
- 활용 상황: 디버그 빌드로 재현한 문제를 소스 단위로 확인합니다.
- 얻는 결과: 소스 라인과 어셈블리 대응을 얻습니다.
- 제한 사항: 디버그 정보가 제거된 바이너리에서는 동작하지 않습니다.
설치 및 실행
Ubuntu / Debian
binutils 패키지에 포함되어 있으며 보통 gcc 설치 시 함께 들어옵니다.
sudo apt update
sudo apt install binutils
RHEL / CentOS / Fedora
기본 저장소에서 binutils를 설치합니다.
sudo dnf install binutils
버전 확인
설치된 버전을 확인해 공식 최신 버전과 비교합니다.
objdump --version | head -1
실제 사용 예제
섹션 목록 확인
ELF 파일의 섹션 구성을 봅니다.
objdump -h ./app-server
디스어셈블 (예시)
main 심볼 근처를 디스어셈블합니다. 출력은 예시입니다.
objdump -d --disassemble=main ./app-server
동적 심볼 확인
동적으로 연결된 함수 목록을 봅니다.
objdump -T ./app-server | head
장점과 한계
장점
- 거의 모든 Linux 개발·빌드 환경에 기본으로 들어 있어 설치 부담이 없습니다.
- 파일 단위 정적 분석에 충분한 기능을 명령줄로 제공합니다.
- GDB·readelf와 함께 표준 binutils 구성이라 문서와 자료가 풍부합니다.
- GPL 라이선스로 자유롭게 사용·재배포됩니다.
사용 전에 고려할 점
- GUI나 디컴파일 기능이 없어 사람 코드 수준의 이해는 추가 도구가 필요합니다.
- 대형 바이너리는 출력량이 방대해 필터링 스킬이 요구됩니다.
- stripped 파일에서는 심볼 기반 디스어셈블이 제한됩니다.
- PE·Mach-O 지원은 ELF에 비해 제한적일 수 있습니다.
비슷한 프로그램과 비교
| 프로그램 | 특징 | 이런 경우에 적합 |
|---|---|---|
| readelf | ELF 전용으로 더 상세한 헤더·동적 섹션 정보를 제공합니다. | ELF 메타데이터를 정밀 확인할 때. |
| gdb | 실행 중 디버깅과 정적 디스어셈블을 모두 지원합니다. | 실행 상태 변수·스택까지 봐야 할 때. |
| radare2 | 다중 아키텍처 리버싱 프레임워크로 GUI·스크립팅이 강합니다. | 다양한 아키텍처 바이너리를 깊게 분석할 때. |
공식 자료 및 추가 학습
- 공식 홈페이지 — https://www.gnu.org/software/binutils/
- 공식 문서 / 지식베이스 — https://sourceware.org/binutils/docs/
- 공식 다운로드 — https://ftp.gnu.org/gnu/binutils/
- 릴리스 노트 — https://sourceware.org/pipermail/binutils/
- 소스 / 개발 자료 — https://sourceware.org/git/binutils-gdb.git
버전·지원 환경 정보는 2026-10-18 기준으로 공식 사이트에서 확인한 값입니다. 설치 명령은 사용하는 배포판과 버전에 따라 달라질 수 있으므로 공식 설치 문서를 함께 확인하세요.
실제 실행 화면
objdump 섹션 헤더 출력(-h)을 서버 풍으로 재구성한 합성 예시입니다. 화면은 합성 예시이며 실제 실행 결과가 아닙니다.

실제 운영 중인 서버
이 문서는 화면 표시용 가상 디렉터리의 항목입니다. 실제 서버 파일시스템과 연결되지 않으며, 파일 실행이나 시스템 명령을 수행하지 않습니다.