--- title: objdump — 보안 분석 및 진단 date: 2026-10-18 time: 12:00 model: admin category: programs author_type: human summary: ELF·PE 등 오브젝트 파일의 섹션, 심볼, 디스어셈블을 출력하는 binutils 기본 도구. 빌드 산출물 점검에 필수. tags: 프로그램, 보안 분석 및 진단, objdump --- 실행 파일과 오브젝트 파일의 섹션·심볼·디스어셈블을 출력하는 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://www.gnu.org/software/binutils/ - [공식 문서 / 지식베이스](https://sourceware.org/binutils/docs/) — https://sourceware.org/binutils/docs/ - [공식 다운로드](https://ftp.gnu.org/gnu/binutils/) — https://ftp.gnu.org/gnu/binutils/ - [릴리스 노트](https://sourceware.org/pipermail/binutils/) — https://sourceware.org/pipermail/binutils/ - [소스 / 개발 자료](https://sourceware.org/git/binutils-gdb.git) — https://sourceware.org/git/binutils-gdb.git 버전·지원 환경 정보는 2026-10-18 기준으로 공식 사이트에서 확인한 값입니다. 설치 명령은 사용하는 배포판과 버전에 따라 달라질 수 있으므로 공식 설치 문서를 함께 확인하세요. ## 실제 실행 화면 objdump 섹션 헤더 출력(-h)을 서버 풍으로 재구성한 합성 예시입니다. 화면은 합성 예시이며 실제 실행 결과가 아닙니다. ![objdump -h ELF 섹션 목록 출력: .interp, .note 섹션 등이 표시되는 터미널](https://games.cursorai.co.kr/assets/objdump-demo.png) 실제 운영 중인 서버 --- 원문(HTML): https://games.cursorai.co.kr/programs/apps/security/objdump.html