바이너리 유틸리티

2024. 1. 21. 14:59리눅스/쉬운 리눅스

728x90
반응형
  1. objdump:
    • objdump는 컴파일된 바이너리 파일에서 정보를 출력하는 유틸리티입니다. 주로 어셈블리 코드, 섹션 정보, 심볼 테이블 등을 확인하는 데 사용됩니다.
    • 예시: objdump -d executable
  2. as (Assembler):
    • as는 어셈블리 코드를 기계 코드로 어셈블링하는 어셈블러입니다.
    • 예시: as -o output.o source.s
  3. Id:
    • Id는 컴파일된 바이너리의 종류 및 정보를 표시하는 유틸리티입니다.
    • 예시: Id executable
  4. addr2line:
    • addr2line은 어드레스와 소스 코드의 라인 번호 간의 매핑을 제공하는 유틸리티입니다. 주로 특정 어드레스의 소스 코드 위치를 찾는 데 사용됩니다.
    • 예시: addr2line -e executable 0xaddress
  5. nm (Name List):
    • nm은 컴파일된 바이너리의 심볼 테이블을 출력하는 유틸리티입니다. 주로 함수나 변수의 주소, 타입 등을 확인하는 데 사용됩니다.
    • 예시: nm executable
  6. readelf:
    • readelf는 ELF(Executable and Linkable Format) 파일 포맷으로 작성된 바이너리의 세부 정보를 표시하는 데 사용됩니다. ELF는 대부분의 Unix 계열 시스템에서 사용되는 바이너리 파일 포맷 중 하나입니다.
    • 예시: readelf -h executable
ELF(Executable and Linkable Format)는 컴퓨터 프로그램의 바이너리 파일 형식 중 하나로, 주로 UNIX 및 UNIX-like 운영 체제에서 사용됩니다. ELF는 실행 파일, 공유 라이브러리, 코어 덤프 등 여러 종류의 이진 파일을 지원하는 범용적인 형식입니다.

ELF 파일은 크게 세 가지 섹션으로 구성됩니다:
헤더(Header): ELF 파일의 기본적인 정보를 담고 있습니다. 헤더에는 프로그램이 시작되는 주소, 섹션 테이블, 프로그램 헤더 테이블 등의 정보가 포함됩니다.

세그먼트와 섹션(Segments and Sections): ELF 파일은 여러 개의 섹션과 세그먼트로 구성됩니다. 세그먼트는 로딩될 때 메모리에 올라가는 단위이며, 섹션은 세그먼트 내에서 다양한 종류의 데이터 및 코드를 담고 있는 단위입니다. 각 섹션은 특정한 종류의 데이터를 나타내고, 프로그램의 기능에 필요한 정보를 포함합니다.

심볼 테이블(Symbol Table): ELF 파일은 프로그램 내에서 사용되는 심볼들에 대한 정보를 포함하는 심볼 테이블을 가지고 있습니다. 이 테이블은 함수나 변수의 이름, 주소, 타입 등을 정의합니다.

ELF 형식은 여러 아키텍처와 운영 체제에서 사용되며, 이식성과 확장성을 갖춘 이진 파일 포맷으로 폭넓게 사용됩니다. ELF는 Linux, UNIX, BSD 등과 같은 운영 체제에서 기본적인 실행 파일 형식으로 사용되며, 이는 프로그램을 컴파일하고 실행하는 데 필요한 정보를 효과적으로 담고 있습니다.
mkdir objview
cd objview
cp build/out/vmlinx .

#objdump -x 헤더정보 출력
objdump -x vmlinux

#objdump -d 어셈블리어로 출력
objdump -d vmlinux

#함수 위치 확인, System.map
cp ~/build/out/System.map ~/build/objdump

schedule 시작주소 - 끝 주소

schedule 시작주소 - 끝 주소

objdump --start-address=0xc1d35100 --stop-address=0xc1d351a0 -d vmlinux > schedule.s
vi schedule.s

 

halt로 끄기 - 안그러면 파일 시스템 손상 있을 수 있음

 


crosscompile 후 aarch64-linux-gnu-objdump -x your_binary로 vmlinx 확인하면  aarch64 볼 수 있음.

aarch64-linux-gnu-objdump -x vmlinux --start--address="시작주소" --stop-address="끝주소"| less

 

반응형

'리눅스 > 쉬운 리눅스' 카테고리의 다른 글

set_filter_function  (0) 2024.01.23
컴파일  (0) 2024.01.21