강좌 & 팁
글 수 2,412
2012.04.21 15:15:56 (*.52.177.29)
43242
바이너리 유틸리티는 바이너릴르 조작 하거나 바이너리 정보를 보기 위한 프로그램 들의 모임이다.
이러한 바이너리 유틸리티를 잘 이용하면 바이너리 파일에서 유용한 정보를 얻을 수 있다.
Ubuntu 에서는 다음과 같이 binutils 패키지가 설치 되어 있는지 확인 해 볼 수 있다.
-------------------------------
# dpkg -l | grep binutils
ii binutils 2.21.0.20110327-2ubuntu3 The GNU assembler, linker and binary utilities
-------------------------------
ii가 맨 앞에 보이면 설치가 되어 있다는 것이다.
만일 설치가 되어 있지 않을 경우 다음과 같이 입력 하여 설치 할 수 있다.
-------------------------------
# apt-get install binutils
-------------------------------
binutils 패키지에는 어떠한 파일이 있는지 확인해 보자. 다음과 같은 명령어를 입력 하여 확인 한다.
-------------------------------
# dpkg -L binutils
/.
/usr
/usr/share
/usr/share/man
/usr/share/man/man1
/usr/share/man/man1/ar.1.gz
/usr/share/man/man1/as.1.gz
/usr/share/man/man1/elfedit.1.gz
/usr/share/man/man1/nm.1.gz
/usr/share/man/man1/objdump.1.gz
/usr/share/man/man1/ranlib.1.gz
/usr/share/man/man1/readelf.1.gz
/usr/share/man/man1/size.1.gz
/usr/share/man/man1/strings.1.gz
/usr/share/man/man1/strip.1.gz
/usr/share/man/man1/windmc.1.gz
/usr/share/man/man1/gprof.1.gz
/usr/share/man/man1/nlmconv.1.gz
/usr/share/man/man1/dlltool.1.gz
/usr/share/man/man1/ld.bfd.1.gz
/usr/share/man/man1/addr2line.1.gz
/usr/share/man/man1/c++filt.1.gz
/usr/share/man/man1/objcopy.1.gz
/usr/share/lintian
/usr/share/lintian/overrides
/usr/share/lintian/overrides/binutils
/usr/share/doc
/usr/share/doc/binutils
/usr/share/doc/binutils/test-summary.gz
/usr/share/doc/binutils/copyright
/usr/share/doc/binutils/NEWS.gz
/usr/share/doc/binutils/bfd
/usr/share/doc/binutils/bfd/PORTING.gz
/usr/share/doc/binutils/bfd/TODO.gz
/usr/share/doc/binutils/gas
/usr/share/doc/binutils/gas/NEWS.gz
/usr/share/doc/binutils/gprof
/usr/share/doc/binutils/gprof/TODO.gz
/usr/share/doc/binutils/gprof/TEST.gz
/usr/share/doc/binutils/gprof/bbconv.pl
/usr/share/doc/binutils/ld
/usr/share/doc/binutils/ld/TODO.gz
/usr/share/doc/binutils/ld/NEWS.gz
/usr/share/doc/binutils/changelog.Debian.gz
/usr/share/doc/binutils/README.cross.gz
/usr/lib
/usr/lib/libbfd-2.21.0-system.20110327.so
/usr/lib/gold-ld
/usr/lib/compat-ld
/usr/lib/libopcodes-2.21.0-system.20110327.so
/usr/lib/ldscripts
/usr/lib/ldscripts/elf_i386.x
/usr/lib/ldscripts/elf_i386.xbn
/usr/lib/ldscripts/elf_i386.xc
/usr/lib/ldscripts/elf_i386.xd
/usr/lib/ldscripts/elf_i386.xdc
/usr/lib/ldscripts/elf_i386.xdw
/usr/lib/ldscripts/elf_i386.xn
/usr/lib/ldscripts/elf_i386.xr
/usr/lib/ldscripts/elf_i386.xs
/usr/lib/ldscripts/elf_i386.xsc
/usr/lib/ldscripts/elf_i386.xsw
/usr/lib/ldscripts/elf_i386.xu
/usr/lib/ldscripts/elf_i386.xw
/usr/lib/ldscripts/elf_l1om.x
/usr/lib/ldscripts/elf_l1om.xbn
/usr/lib/ldscripts/elf_l1om.xc
/usr/lib/ldscripts/elf_l1om.xd
/usr/lib/ldscripts/elf_l1om.xdc
/usr/lib/ldscripts/elf_l1om.xdw
/usr/lib/ldscripts/elf_l1om.xn
/usr/lib/ldscripts/elf_l1om.xr
/usr/lib/ldscripts/elf_l1om.xs
/usr/lib/ldscripts/elf_l1om.xsc
/usr/lib/ldscripts/elf_l1om.xsw
/usr/lib/ldscripts/elf_l1om.xu
/usr/lib/ldscripts/elf_l1om.xw
/usr/lib/ldscripts/elf_x86_64.x
/usr/lib/ldscripts/elf_x86_64.xbn
/usr/lib/ldscripts/elf_x86_64.xc
/usr/lib/ldscripts/elf_x86_64.xd
/usr/lib/ldscripts/elf_x86_64.xdc
/usr/lib/ldscripts/elf_x86_64.xdw
/usr/lib/ldscripts/elf_x86_64.xn
/usr/lib/ldscripts/elf_x86_64.xr
/usr/lib/ldscripts/elf_x86_64.xs
/usr/lib/ldscripts/elf_x86_64.xsc
/usr/lib/ldscripts/elf_x86_64.xsw
/usr/lib/ldscripts/elf_x86_64.xu
/usr/lib/ldscripts/elf_x86_64.xw
/usr/lib/ldscripts/i386linux.x
/usr/lib/ldscripts/i386linux.xbn
/usr/lib/ldscripts/i386linux.xn
/usr/lib/ldscripts/i386linux.xr
/usr/lib/ldscripts/i386linux.xu
/usr/bin
/usr/bin/size
/usr/bin/objdump
/usr/bin/ar
/usr/bin/strings
/usr/bin/ranlib
/usr/bin/objcopy
/usr/bin/addr2line
/usr/bin/readelf
/usr/bin/elfedit
/usr/bin/nm
/usr/bin/strip
/usr/bin/c++filt
/usr/bin/as
/usr/bin/ld.gold
/usr/bin/ld.gold.real
/usr/bin/gprof
/usr/bin/ld.bfd
/usr/bin/ld.bfd.real
/usr/share/man/man1/ld.1.gz
/usr/lib/gold-ld/ld
/usr/lib/compat-ld/ld
/usr/bin/ld
/usr/bin/gold
----------------------------------
위에 보이는 바와 같이 패키지를 설치 하면 굉장히 많은 파일(118개)이 설치 되어 있는 것을 확인 할 수 있다.
설치 되어 있는 각각의 바이너리 유틸리티에 대해 간략히 살펴 본다.
----------------------------------
/usr/bin/size -> 오브젝트 파일의 사이즈 정보
/usr/bin/objdump -> 오브젝트 파일을 덤프
/usr/bin/ar -> 정적 라이브러리 만들기
/usr/bin/strings -> 바이너리에서 출력 가능한 문자들 출력
/usr/bin/ranlib -> 정적 라이브러리 내에 익덱스 생성
/usr/bin/objcopy -> 오브젝트 파일의 복사 및 변환
/usr/bin/addr2line -> 바이너리 파일에서 특정 주소가 어떤 파일의 어떤 라인인지 보여줌
/usr/bin/readelf -> ELF 포멧의 오브젝트 파일 정보를 보여줌
/usr/bin/elfedit -> ELF 포멧의 오브젝트 파일의 헤더를 수정
/usr/bin/nm -> ELF 포멧의 오브젝트 파일의 심볼을 보여줌
/usr/bin/strip -> 오브젝트 파일의 사이즈를 줄임
/usr/bin/c++filt -> C++ 또는 JAVA 심볼 문자열을 맹글링 되기 전의 문자열로 보여줌
/usr/bin/as -> GNU 어셈블러
/usr/bin/gprof -> 프로파일 정보 출력
/usr/bin/ld -> GNU 링커
----------------------------------