바이너리 유틸리티는 오브젝트 포멧의 파일을 조작할 수 있는 프로그램이다.
오브젝트 파일: 컴파일러가 생성한 중간 단계 파일
오브젝트 파일 형식 세 가지 주요 유형

리눅스 커널 어셈블리 코드와 섹션 정보를 볼 수 있는 objdump를 사용해 볼 것이다. 오브젝트 파일로는 리눅스 커널을 빌드하면 생성되는 vmlinux를 활용한다.
vmlinux: 리눅스가 지원하는 목적 파일 포맷들 중 하나에서 리눅스 커널을 포함하는 정적으로 링크된 실행 파일이다
objdump Usage: objdump <option(s)> <file(s)> Display 를 작성하여 지정 옵션을 볼 수 있다.
라즈비안에서는 기본적으로 바이너리 유틸리티를 사용할 수 있어서 바이너리 유틸리티를 따로 설치할 필요가 없다.
mkdir를 통해 /home/pi/kernel_obj라는 디렉터리를 만든다.
cd kernelobj/로 디렉터리에 들어간다.
cp ../rpi_kernel_src/out/vmlinux .를 통해 리눅스 커널 이미지 생성 폴더에 있는 vmlinux 파일을 복사한다.

cp 복사할 파일경로 이동할 파일경로 형식을 지키지 않았다는 것이다...은 현재 디렉터리의 상위 파일로 가는 것이다..은 현재 디렉터리를 가르키는 것이다.objdump -x vmline | more를 통해 vmlinux의 헤더 정보를 확인이 가능하다.

04~06번째 줄에서는 아키텍처 이름과 스타트업 코드의 위치를 표시한다

스타트업 코드 주소가 0x80008000인 것을 알 수 있다.
스타트업 코드: 이미지가 처음 실행될 때 동작하며, 어셈블리 코드로 구성돼 있다. 보통 시스템 초기 설정을 수행하고 arm 모드별로 스택 주소를 설정한다.
13~24번째 줄은 섹션 정보이다.

objdump -d vmlinux 명령어를 입력하는 vmlinux에서 어셈블리 코드를 출력할 수 있다

이것을 해보면 느낄 것이다. 너무 많은 어셈블리 코드가 출력돼 어셈블리 코드를 보기 어렵다. 그래서 옵션을 지정해 특정 함수 어셈블리 코드를 보는 방법을 알아 볼 것이다.
커널 이미지를 빌드하면 함께 생성되는 System.map 파일을 cp를 통해 갖고 온다.
System.map 파일을 열어보면 심벌별 주소를 확인할 수 있다.주소 출력 결과는 16진수 형식이다.
objdump --start-address=시작주소 --stop-address=끝주소 -d vmlinux로 원하는 함수의 어셈블리 코드만 볼 수 있다.