Tool Chain

MySprtlty·2023년 4월 18일
0

Moonix

목록 보기
4/10

🏷️Tool Chain

📌arm-none-eabi-gcc

📌arm-none-eabi-as

  • 어셈블러 (assembly file -> object file)
  • arm-none-eabi-as -march=ISA버전 -mcpu=CPU -o Object file Assembly file list

📌arm-none-eabi-objcopy

  • object file(ELF형식)로부터 binary만 뽑아낸다. (object file -> binary file)

📌arm-none-eabi-objdump

  • disassemble한다.
  • 실행 파일로(ELF형식)부터 내부가 어떻게 되어있는지 들여다 본다.
  • objcopy는 아직 링킹되지 않은 object file(ELF형식)로부터 바이너리를 뽑아내는 것이고, objdump는 이미 링킹을 통해 만들어진 실행 파일(ELF형식)으로부터 disassemble하여 내부를 들여다 보는 것이다.

📌arm-none-eabi-ld

  • object file들을 모아서 링킹한다.

🏷️gcc-arm-none-eabi 이름의 의미

📌gcc-arm-플랫폼-ABI타입

플랫폼

  • 플랫폼은 linux와 none이 있다.
  • 플랫폼이 linux라면, ARM용으로 동작하는 리눅스의 실행 파일을 만드는 것이 목적이라는 뜻이다.
    • OS: linux
    • ISA: ARM
  • 플랫폼이 none이라면, 그냥 날 것(raw) 그대로의 ARM바이너리를 생성해준다는 뜻이다.

ABI타입

  • ABI(Application Binary Interface)는 C언어에서 함수 호출을 어떻게 하느냐를 정해놓은 규약이다.
  • 즉, 바이너리 수준에서 애플리케이션이 호환 가능하도록 만든 인터페이스라는 뜻이다.
  • 바이너리 수준이란 컴파일이 완료된 Object file을 말한다.
  • 즉, 링커가 Object file을 링킹할 수 있도록 함수 호출 방법을 정의한 인터페이스다.
    • cf. Object file에는 라이브러리도 포함된다.
  • ABI는 운영체제에서 동작하는 실행 파일에 대한 폭넓은 정의까지도 모두 포함하고 있는 개념이기에 EABI라는 규약을 만들어 임베디드 환경에서의 ABI를 구분하고 있다.
  • EABI와 ABI의 가장 큰 차이점은 동적 링크 지원 유무다.
  • EABI는 무조건 정적 링크만 지원한다.
  • 애초에 운영체제가 없는데 누가 동적 라이브러리를 관리하고 동적 링킹을 해줄까?
profile
2Co 4:7

0개의 댓글