Study

ELF파일

부산대보금자리 2021. 7. 25. 14:29

제일 처음 .c 파일을 작성하여 생성한다. 이 소스파일이 컴파일되는 과정을 살펴보자

 

.c파일은 .i 파일로 가는 전처리기 과정을 거친다. 

이 과정은 헤더파일 삽입과 매크로 치환 및 적용 과정을 거친다. 

 

두 번째로는 C 컴파일러 과정을 거쳐서 .i 파일이 .asm파일로 간다. 

여기서는 중간언어를 생성하는 것인데 이유는 언어 종속적인 부분과 기계 종속적인 부분을 분리하여 

컴파일러를 모듈화 하고 최적화하기 위해서이다.

 

세 번째로는 어셈블러를 이용하여 .asm파일이 .o 파일로 바뀐다. 

.o파일은 .s의 기계어와 데이터가 들어있는 ELF바이너리 포맷의 구조를 가진다.

여기서 ELF(Executable and linking format)이란 실행 및 링크가 가능한 포맷이다. ( exe파일과 비슷)

 

ELF이 필요한 이유는 우리가 링커라면 링크해야 할 여러 object파일들이 일정한 규칙을 가지고 있지 않고 제멋대로 되어 있다면 

이를 하나의 실행파일로 만들기가 힘들 것이다.

즉 바이너리 파일 구조를 알아야만 어디서 어디까지가 기계어이고 어디서 어디까지가 데이터인지 알 수 있다.

 

또한 어떻게든 실행 파일로 만들었다고 해도 이를 실행하기 위해 실행파일을 메모리에 어떻게 어느 부분을 실행시켜야 할지 알 수가 없다.

 

그렇기 때문에 실행파일을 실행할때 링커나 로더에게 정보를 제공해야만 링크하고 로드하고 실행할 수 있다.

물론 그러기 위해서 바이너리 파일이 일정한 규칙을 가지는 구조로 되어있어야 하고 바이너리 스스로 정보를 제공할 수 있어야 가능하다.

 

실제로 object file의 제일 처음에는 ELF헤더가 붙는다. 이 헤더에는 바이너리 특징을 결정짓는 엔디안,운영체제,cpu의 정보와 함께 바이너리 내부의 각 구역 시작 위치와 크기 정보가 들어 있다.

 

'Study' 카테고리의 다른 글

OPTEE pc레지스터 & secure storage(수정중)  (0) 2021.07.26
OPTEE Systemcall Hash연산  (0) 2021.07.25
OPTEE system call 실습  (0) 2021.07.24
ARM TrustZone 메커니즘  (2) 2021.07.22
ARMv8  (0) 2021.07.22