본문 바로가기
임베디드 개발/펌웨어

오브젝트 파일 .o .obj

by eteo 2022. 12. 2.

오브젝트 파일(Object File)

어셈블러를 통해 변환된 어셈블리 코드는 이제 더 이상 사람이 알아볼 수 없는 기계어로 변환되는데 이를 오브젝트 코드(목적코드)라 부르고, 오브젝트 코드로 구성된 파일을 오브젝트 파일(Object File)이라 부른다. 이 오브젝트 파일은 특정한 파일 포맷을 가진다. (Windows의 경우 PE(Portable Executable), Linux의 경우 ELF(Executable and Linking Format))

 

 

  

오브젝트 파일 포맷

 

Object File Header : 오브젝트 파일의 기초 정보를 가지고 있는 헤더 

Text Section : 기계어로 변환된 코드가 들어 있는 부분 

Data Section : 데이터(전역 변수, 정적 변수)가 들어 있는 부분 

Symbol Table Section : 소스 코드에서 참조되는 심볼들의 이름과 주소가 정의 되어 있는 부분 

Relocation Information Section : 링킹 전까지 심볼의 위치를 확정할 수 없으므로 심볼의 위치가 확정 나면 바꿔야 할 내용을 적어놓은 부분 

Debugging Information Secion : 디버깅에 필요한 정보가 있는 부분

 

여기서 중요한 부분은 심볼 테이블 섹션과 재배치 정보 섹션이다.

 

심볼(Symbol)은 함수나 변수를 식별할 때 사용하는 이름으로 심볼 테이블(Symbol Table) 안에는 오브젝트 파일에서 참조되고 있는 심볼 정보(이름과 데이터의 주소 등)를 가지고 있다.

 

이때 오브젝트 파일의 심볼 테이블에는 해당 오브젝트 파일의 심볼 정보만 가지고 있다.

 

예를들어 main.c에서 #include<stdio.h>를 하고 printf 함수를 사용했다면 전처리 과정을 통해 printf 함수의 원형은 복사했지만 printf를 구현한 내용은 포함되어 있지 않기 때문에 main.o 파일은 독립적으로 실행할 수 없다. 심볼 테이블에는 해당 오브젝트 파일의 심볼 정보만 가지고 있지 외부에서 참조하는 함수에 대한 심볼 정보는 가지고 있지 않기 때문이다. 따라서 main.o 파일을 실행하기 위해서는 printf 함수를 구현한 오브젝트파일(libc.a 라이브러리)과 연결시키는 작업이 필요하다.

 

출처 : https://bradbury.tistory.com/226

 

'임베디드 개발 > 펌웨어' 카테고리의 다른 글

ELF 파일 포맷  (0) 2022.12.02
심볼  (0) 2022.12.02
컴파일 과정  (0) 2022.12.02
RS232 등 시리얼 케이블 고장 유무 확인법  (0) 2022.12.01
EABI  (0) 2022.11.30