-
Notifications
You must be signed in to change notification settings - Fork 0
ELF
이 문서는 지홍이가 올려준 참고자료 [1]의 내용을 요약 및 번역 한 것이다. 그럼 지금부터 ELF 파일에 대해 알아보자.
ELF = Executable and Linkable Format 그냥 실행파일이라 생각하면 속 편하다.
- ELF Header
- File data
위와 같이 두 개로 나뉜다. readelf
프로그램을 이용해서 ELF 헤더를 볼 수 있다.
우리는 ARM을 쓰니까 정확히는 arm-none-eabi-readelf
를 써야 한다.. 근데 이름이 너무 길어서 이 문서에서는 그냥 readelf
라고만 적겠다.
굳이 헤더를 만드는 이유는, 여기에 여러 중요한 정보들을 담아놓기 위함이다. 다시 말해, 우리가 readelf만 잘 볼 줄 알아도 실행파일을 빠르게 이해할 수 있다는 것이다.
그럼 지금부터 위의 스샷에 보이는, ELF 헤더 속 각각의 필드들에 대해 알아보자.
모든 ELF 파일은 첫 4바이트 값이 7f 45 4c 46
으로 동일하다. 45, 4c, 46을 순서대로 읽으면 ELF가 된다. 이 4개의 값을 통해 ELF 파일의 무결성을 확인한다. 다르게 말하자면, 이 값들은 절대 멋대로 바꾸면 안된다.
실제 파일 내에서는 01 또는 02의 값을 가진다. 01이면 32비트, 02이면 64비트용 실행파일이다. 위 스샷에선 readelf
가 보기 좋게 출력해 준 것을 확인할 수 있다.
- 2의 보수 vs 1의 보수
- 리틀 엔디안 vs 빅 엔디안 위 두 정보를 알려준다. PM0214 에 따르면, 우리의 STM32는 32비트, 리틀 엔디안 프로세서를 탑재하고 있으니 참고하자.
01 이외의 값을 가지지 않는다. 별 거 없음.
ABI의 종류를 나타낸다. 함수를 어떻게 호출하는지, 인자는 어떻게 전달하는지 등을 규정하는 게 ABI라 보면 된다. 우리는 arm eabi (embedded abi)를 사용한다.
제곧내
말 그대로 코드가 돌아갈 머신을 말함.
파일 종류.
[1] 지홍이가 올린 자료