📌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
🏷️gcc-arm-none-eabi 이름의 의미
📌gcc-arm-플랫폼-ABI타입
플랫폼
- 플랫폼은 linux와 none이 있다.
- 플랫폼이 linux라면, ARM용으로 동작하는 리눅스의 실행 파일을 만드는 것이 목적이라는 뜻이다.
- 플랫폼이 none이라면, 그냥 날 것(raw) 그대로의 ARM바이너리를 생성해준다는 뜻이다.
ABI타입
- ABI(Application Binary Interface)는 C언어에서 함수 호출을 어떻게 하느냐를 정해놓은 규약이다.
- 즉, 바이너리 수준에서 애플리케이션이 호환 가능하도록 만든 인터페이스라는 뜻이다.
- 바이너리 수준이란 컴파일이 완료된 Object file을 말한다.
- 즉, 링커가 Object file을 링킹할 수 있도록 함수 호출 방법을 정의한 인터페이스다.
- cf. Object file에는 라이브러리도 포함된다.
- ABI는 운영체제에서 동작하는 실행 파일에 대한 폭넓은 정의까지도 모두 포함하고 있는 개념이기에 EABI라는 규약을 만들어 임베디드 환경에서의 ABI를 구분하고 있다.
- EABI와 ABI의 가장 큰 차이점은 동적 링크 지원 유무다.
- EABI는 무조건 정적 링크만 지원한다.
- 애초에 운영체제가 없는데 누가 동적 라이브러리를 관리하고 동적 링킹을 해줄까?