맨위로가기

목적 파일

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

목적 파일은 링커를 통해 실행 파일 또는 라이브러리 파일을 생성하는 데 사용되는 파일 형식이다. 목적 코드는 아직 완전한 프로그램으로 링크되지 않은 기계어의 일부로, 어셈블러에 의해 생성되며, 링커가 여러 목적 파일을 결합하여 실행 파일을 만들거나, 라이브러리 파일의 일부를 형성하는 데 사용된다. 대부분의 목적 파일은 헤더, 코드 세그먼트, 데이터 세그먼트, BSS 세그먼트 등과 같은 세그먼트로 데이터를 관리하며, 다양한 운영 체제와 아키텍처에 따라 여러 목적 파일 형식이 존재한다. 주요 목적 파일 포맷으로는 DOS의 COM 파일, 임베디드 시스템의 IEEE-695, 유닉스 계열의 COFF, ELF, macOS의 Mach-O, Microsoft Windows의 PE 등이 있다. GNU 프로젝트의 BFD 라이브러리는 다양한 형식의 목적 파일에 대한 API를 제공한다.

더 읽어볼만한 페이지

  • 기계어 - 브랜치 (컴퓨터 과학)
    프로그램 실행 흐름을 제어하는 명령어인 브랜치는 점프, 호출, 반환 명령어로 나뉘며, CPU 플래그 레지스터와 주소 지정 방식을 활용하여 코드 분기 및 서브루틴 호출/반환을 수행하지만, 파이프라인 CPU에서 성능 저하를 유발하여 분기 예측 등의 기술로 해결합니다.
  • 기계어 - 주소 지정 방식
  • 컴퓨터에 관한 - 고속 패킷 접속
    고속 패킷 접속(HSPA)은 3세대 이동통신(3G)의 데이터 전송 속도를 높이는 기술 집합체로, 고속 하향/상향 패킷 접속(HSDPA/HSUPA)을 통해 속도를 개선하고 다중 안테나, 고차 변조, 다중 주파수 대역 활용 등의 기술로 진화했으나, LTE 및 5G 기술 발전으로 현재는 상용 서비스가 중단되었다.
  • 컴퓨터에 관한 - 데이터베이스
    데이터베이스는 여러 사용자가 공유하고 사용하는 정보의 집합으로, 데이터베이스 관리 시스템을 통해 접근하며, 검색 및 갱신 효율을 높이기 위해 고도로 구조화되어 있고, 관계형, NoSQL, NewSQL 등 다양한 모델로 발전해왔다.
목적 파일
개요
종류컴파일러의 출력
다른 이름목적 파일, 오브젝트 파일, 오브젝트 프로그램
상세 정보
내용기계어 코드와 데이터
생성 시점컴파일 또는 어셈블 과정에서 생성
사용링커에 의해 실행 가능한 프로그램 생성에 사용
역할소스 코드를 기계가 이해할 수 있는 형태로 변환
관련 기술컴파일러, 링커, 어셈블리어, 기계어
추가 설명
특징컴파일된 소스 코드의 이진 표현
저장 형태일반적으로 파일 형태로 저장
파일 확장자운영체제 및 컴파일러에 따라 다양함 (.o, .obj 등)
용도여러 오브젝트 코드를 링커를 통해 결합하여 실행 가능한 프로그램 생성

2. 목적 파일의 구조 및 역할

목적 파일은 링커를 통해 실행 파일이나 라이브러리 파일로 변환되는 중간 단계의 파일이다.[7] 목적 코드는 완전한 프로그램으로 링크되지 않은 기계어의 일부이며, 링커가 모든 것을 연결하는 데 사용할 수 있는 자리 표시자 또는 오프셋을 포함할 수 있다.

목적 파일은 메모리의 특정 위치(종종 0)에서 시작하는 것으로 간주되며, 메모리 참조 명령어에 대한 정보를 포함하여 링커가 여러 목적 파일을 단일 프로그램으로 결합할 때 코드를 재배치할 수 있게 한다.

목적 파일에는 목적 코드뿐만 아니라 링커가 실행 파일이나 라이브러리를 생성할 때 사용하는 재배치 정보, 프로그램 내 심볼 정보, 디버깅 정보 등이 포함된다.

목적 파일 형식은 다양하며, 초기에는 각 컴퓨터마다 고유한 형식을 가졌으나, 유닉스와 같은 이식 가능한 운영 체제가 보급되면서 COFF, ELF와 같은 형식이 정의되어 여러 시스템에서 사용되게 되었다. 링커의 입력과 출력에 동일한 파일 형식을 사용하는 것이 일반적이므로, 목적 파일 형식은 실행 파일 형식과 같기도 하다.[5]

목적 파일 형식의 설계 및 선택은 시스템 전체 설계와 관련되며, 링커 성능 및 프로그램 개발 효율성에 영향을 미친다. 또한, 동일한 형식을 실행 파일에서 사용하는 경우 프로그램 시작 시간에도 영향을 준다.

2. 1. 세그먼트

대부분의 목적 파일 형식은 데이터를 '세그먼트'라는 단위로 분할하여 관리하며, 이는 메모리 관리 기법 중 하나인 "메모리 세그먼트"에서 유래되었다.[7] 프로그램이 로더에 의해 메모리에 로드되면 로더는 메모리의 여러 영역을 프로그램에 할당한다.

전형적인 객체 파일 형식에서 지원되는 데이터 종류는 다음과 같다.

  • 헤더 정보 (기술/제어 정보)
  • 코드 세그먼트 ("텍스트 세그먼트", 실행 형식 코드)
  • 데이터 세그먼트 (초기값을 가진 정적 변수)
  • 읽기 전용 데이터 세그먼트 (''RODATA'', 초기값을 가지지 않는 정적 상수)
  • BSS 세그먼트 (초기값을 가지지 않는 변수나 상수와 같은 정적 데이터)
  • 링킹을 위한 외부 정의 및 참조 정보
  • 재배치 정보
  • 다이나믹 링크 정보
  • 디버깅 정보


다른 객체 파일 내의 세그먼트는 세그먼트의 정의에서 정해진 규칙에 따라 링커가 결합한다.

2. 2. 링커의 역할

목적 파일은 링커를 통해 실행 파일 또는 라이브러리 파일을 형성한다.[7] 링커는 여러 목적 파일 및 라이브러리 파일을 결합하여 실행 파일을 생성한다. 목적 파일 내 세그먼트들은 정의된 규칙에 따라 링커에 의해 결합된다.[6] 어셈블러 (및 일부 컴파일러)는 목적 중간 단계 없이 실행 파일을 생성하기 위해 기계어로 직접 어셈블할 수도 있다.[3]

3. 주요 목적 파일 포맷

목적 파일 포맷은 운영 체제 및 시스템 아키텍처에 따라 다양하다. 원래 각 컴퓨터는 고유한 포맷을 가졌지만, 유닉스와 같이 포팅 가능한 운영 체제가 등장하면서 COFF, ELF 같은 포맷들이 정의되어 여러 종류의 시스템에서 사용되게 되었다. 동일한 파일 포맷이 링커의 입력과 출력으로 모두 사용될 수 있으며, 라이브러리실행 파일 포맷으로도 사용될 수 있다.[7]

목적 파일에는 목적 코드뿐만 아니라 링커가 실행 파일이나 라이브러리를 생성할 때 사용하는 재배치 정보, 프로그램 내 심볼 정보, 디버깅 정보 등이 포함된다. 목적 파일 포맷의 설계와 선택은 링커의 성능에 영향을 주어 프로그램 개발 효율성에 영향을 미치며, 동일한 형식을 실행 파일에서 사용하는 경우 프로그램 시작 시간에도 영향을 준다.

가장 단순한 목적 파일 형식으로는 MS-DOSCOM 파일 형식이 있으며, 이는 고정 주소에 로드되는 바이트열로 구성된다.

주요 목적 파일 포맷은 다음과 같다.

운영체제포맷
DOSCOM, DOS MZ 실행 파일
임베디드 시스템IEEE-695, S-record
MacintoshPEF/CFM, Mach-O (넥스트스텝, macOS)
Unix 계열a.out, COFF (System V), XCOFF (AIX), ELF (SVR4), Mach-O (NeXT, macOS)
Microsoft Windows16비트 NE, PE


3. 1. 도스 (DOS)


  • COM
  • DOS MZ 실행 파일: 초기 .EXE 파일 형식. 시작 부분에 "MZ"(4D 5A) 문자열이 있다.[5]

3. 2. 임베디드 시스템

IEEE-695와 S 레코드는 임베디드 시스템에서 사용되는 오브젝트 파일 형식이다.

3. 3. 매킨토시 (Macintosh)

PEF/CFM, Mach-O (넥스트스텝, macOS)[5]

3. 4. 유닉스 (Unix) 계열

3. 5. 마이크로소프트 윈도우 (Microsoft Windows)

3. 6. 기타

4. GNU BFD 라이브러리

GNU 프로젝트의 BFD는 다양한 형식의 목적 파일에 대한 공통 API를 제공한다.

참조

[1] 웹사이트 Compiler http://whatis.techta[...] TechTarget 2011-09-01
[2] 서적 Compilers: principles, techniques, and tools Mark S. Dalton
[3] 웹사이트 What do compilers produce? https://pages.cs.wis[...] 2024-04-02
[4] 서적 systems programming
[5] 서적 IBM OS Linkage Editor and Loader http://www.bitsavers[...]
[6] 간행물 Assembly language for the IBM-PC Macmillan
[7] 서적 IBM OS Linkage Editor and Loader http://www.bitsavers[...] 2012-11-20



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com