♧ readelf는 BFD 라이브러리를 이용하지 않고 직접 ELF를 읽기 위한 툴.
▷ BFD에 의존적이지 않은 프로그램도 존재하므로 ELF 파일의 문제인지 BFD의 문제인지 쉽게 구분.
▷ readelf는 BFD를 경유하지 않고 ELF 파일을 읽어내므로 objdump보다 상세한 정보를 얻을 수 있다.
▷ 예를 들면 DWARF 디버그 정보를 검사할 수도 있다.
▷ readelf 명령은 하나 이상의 옵션을 사용해야 함. (옵션을 지정하지 않으면 기본 사용법 출력)
(※ BFD 라이브러리(Birnary Descriptor Library):
다양한 형식의 오브젝트 파일의 호환성을 위한 GNU 프로젝트의 주 매커니즘.)
[ ELF 헤더 출력 ] | ||
헤더 종류 | 옵션 | 긴 옵션 |
ELF 파일 헤더 | -h | --file-header |
프로그램 헤더 | -l (엘) | --program-headers, --segments |
섹션 헤더 | -S | --section-headers, --sections |
위 세가지 헤더 | -e | --headers |
[ ELF 정보 출력 ] | ||
종보 종류 | 옵션 | 긴 옵션 |
심볼 테이블 | -s | --syms, --symbols |
재배치 정보 | -r | --relocs |
동적 세그먼트 | -d | --dynamic |
버전 섹션 | -V | --version-info |
아키텍처 의존정보 | -A | --arch-specific |
버킷 리스트 길이 히스토그램 | -I(아이) | --histogram |
모든 헤더 및 정보 | -a | --all |
코어 노트(core notes) | -n | --notes |
unwind 정보 | -u | --unwind |
▷ 일반적으로 심볼 정보는 심볼 섹션에 있는 심볼 정보를 이용하지만, -D 옵션 (--use-dynamic 옵션)을 사용하면 동적 섹션에 있는 심볼 정보를 이용하게 됨. |
[ ELF 섹션 덤프 ] |
▷ -x 옵션 (--hex-dump 옵션)을 이용해 지정한 섹션의 내용을 덤프. (섹션은 섹션 번호로 표시하고, -S 옵션으로 출력된 섹션 헤더에 섹션 번호가 표시된다.) ▶ 사용 예)
|
[ DWARF2 디버그 섹션 출력 ] | ||
▷ -w 옵션(--debug-dump 옵션)으로 DWARF2 디버그 섹션 정보를 출력. | ||
-w | --debug-dump= | 섹션 |
l | line | .debug_line |
i | info | .debug_info |
a | abbrev | .debug_abbrev |
p | pubnames | .debug_pubnames |
r | aranges | .debug_aranges |
R | Ranges | .debug_ranges |
m | macro | .debug_macinfo |
f | frames | .debug_frame |
F | frames-interp | .debug_frame |
s | str | .debug_str |
o | loc | .debug_loc |
[ 긴 이름의 심볼 출력 ] |
▷ -W 옵션 (--wide 옵션)을 사용하면 80문자 이상의 행도 출력이 가능 (기본적으로 긴 이름의 심볼은 1행 이내에 출력되도록 뒷부분이 잘린다.) |
'컴퓨터 서적 정리 > Binary Hacks' 카테고리의 다른 글
[Hack #10] objdump - (2) 오브젝트 파일 역어셈블 (0) | 2011.07.03 |
---|---|
[Hack #9] objdump - (1) 오브젝트 파일 덤프 (0) | 2011.07.03 |
[Hack #7] ldd - 공유 라이브러리 의존관계 확인 (0) | 2011.07.02 |
[Hack #6] 정적 라이브러리와 공유 라이브러리 (1) | 2011.07.02 |
[Hack #5] Object file - ELF 파일 (0) | 2011.07.01 |