2011. 7. 2. 18:44

♧ 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행 이내에 출력되도록 뒷부분이 잘린다.)

Posted by devanix