728x90
반응형
맨 위로 올라가기
object

 

 

간단하게 Hello World! 를 출력하는 함수가 정의된 hello.c라는 코드 파일을 생성하였다.

#include <stdio.h>

void test_hello_world(void)
{
        printf("Hello world!\n");
}

 

이후 컴파일을 하여 오브젝트 파일을 생성한다.

만일 컴파일러가 설치되어 있지 않았다면 다음 명령어를 통해 설치한다.

gcc -c hello.c
sudo apt install gcc

 

'hello.o'라는 오브젝트 파일이 실행되면 vi 편집기를 통해 확인한다.

 

바이너리로 이루어진 파일을 확인할 수 없으니 헥사 에디터와 같은 프로그램을 사용해야 한다.

번거로우니 vi 편집기 내에서 헥사모드를 사용한다.

 

[Hexa mode]
:%!xxd

[origin mode]
:%!xxd -r

 

 

위 내용 확인시 바이너리 코드가 많으며 심볼과 코드를 영역별로 처리되다는 것은 알게 되나 읽고 해석하기 어렵다.
파일 맨 앞 부분에 ELF 문구가 있는데 이것은 즉 파일이 ELF 포맷으로 만들어졌다는 것을 의미한다.

 


ELF(Executable and Link Format)

 

ELF(Execuatable and Link Format)는 주로 유닉스 및 유닉스 계열의 운영 체제(예:리눅스)에서 사용되는 파일 형식이다.
이 형식은 실행 파일, 컴파일된 오브젝트 파일, 공유 라이브러리, 코어 덤프 등 다양한 종류의 바이너리 데이터를 위해 설계되었다. ELF 파일은 프로그램의 코드와 데이터를 메모리로 로드하는 데 필요한 정보를 포함하고 있으며,
이는 운영 체제가 파일을 실행하거나 라이브러리를 메모리에 로드하는 데 사용된다. ELF 파일 형식은 유연성과 확장성을 제공하며, 다양한 프로세서 아키텍처와 운영 체제에서 호환되는 바이너리 파일을 생성할 수 있다.

(실행 가능하고 링크 할 수 있는 파일 포맷)

 

ELF 파일 구조

 

  1. Header:
    파일의 시작 부분에 위치하며, 파일의 타입(실행 가능 파일, 공유라이브러리, 오브젝트 파일 등), 아키텍처, 버전, 엔트리 포인트 주소 등의 기본 정보를 포함한다.

  2. Program(Segment) Header Table:
    실행 파일에만 존재하며, 운영 체제가 프로그램을 메모리로 로드할 때 필요한 정보를 제공한다.
    이 테이블은 메모리에 로드할 세그먼트들에 대한 정보를 포함한다.

  3. Section Header Table:
    파일 내의 각 섹션에 대한 정보를 가지고 있으며, 섹션의 이름, 타입, 크기, 메모리 주소 등을 포함한다.
    이 테이블은 파일의 끝에 위치한다.

ELF 파일은 이러한 구조를 통해 운영체제가 필요한 정보를 효율적으로 찾고 사용할 수 있도록 해준다.

728x90
반응형

'Firmware & Embedded > ARM' 카테고리의 다른 글

STM32 - Clock Configuration  (0) 2024.01.05
To build a simple build process  (0) 2024.01.01
Chipset 의 이해  (0) 2023.12.23
HAL(Hardware Abstraction Layer)  (0) 2023.12.21
STM32CubeMX  (0) 2023.12.20

+ Recent posts