커피

COFF
커피
파일 이름 확장자
none, .o, .obj, .lib[1]
매직 넘버4C 01386용 64 86AMD64용 00 02Itanium용[2]
개발자AT&T
포맷의 종류바이너리, 실행 파일, 오브젝트, 공유 라이브러리
확장처XCOFF, ECOFF, 휴대용 실행 파일, 실행 파일링크 형식

COFF(Common Object File Format)는 UNIX 시스템에서 사용되는 실행 파일, 개체 코드 및 공유 라이브러리 컴퓨터 파일의 형식입니다.Unix System V에서 도입되어 기존에 사용되던 a.out 포맷을 대체하였으며, XCOFF ECOFF와 같은 확장 사양의 기반을 형성하였으며, 그 후 대부분 ELF로 대체되었고 SVR4로 도입되었다.COFF 및 그 변형은 일부 Unix 계열 시스템, Microsoft Windows(Portable Executive 파일), UEFI 환경 및 일부 임베디드 개발 시스템에서 계속 사용됩니다.

역사

원래 Unix 객체 파일 형식 a.out은 공유 라이브러리, 외부 형식 식별[citation needed] 또는 명시적 주소[citation needed] 연결을 적절하게 지원할 수 없습니다.AT&T 안팎에서 Unix와 유사한 시스템의 개발이 계속되면서, 이러한 문제들과 다른 해결책들이 등장했습니다.

COFF는 1983년 AT&T의 UNIX System V에서 3B20[citation needed] 같은 비 VAX 32비트 플랫폼용으로 도입되었습니다.기존 AT&T a.out 형식보다 개선된 기능에는 임의 섹션, 명시적 프로세서 선언 및 명시적 주소 링크가 포함됩니다.

그러나 COFF 설계는 너무 제한적이고 불완전하게 지정되었습니다.섹션의 최대 수, 섹션 이름의 길이 제한, 소스 파일 포함, 심볼릭 디버깅 정보는 C와 같은 실제 언어, C++와 같은 새로운 언어 또는 새로운 프로세서를 지원할 수 없었습니다.결과적으로 COFF의 모든 실제 구현은 필연적으로 표준을 위반하는 것이었다.이로 인해 COFF가 다수 확장되었습니다.IBMAIX에서 XCOFF 형식을 사용했고, DEC, SGI 등은 ECOFF를 사용했으며, 임베디드 개발을 목표로 하는 수많은 SysV 포트와 도구 체인은 각각 호환되지 않는 고유한 변형을 만들었습니다.

SVR4의 출시로 AT&T는 COFF를 ELF로 대체했습니다.

COFF의 확장 버전은 일부 Unix와 유사한 플랫폼(주로 임베디드 시스템에서)에서 계속 사용되지만, 오늘날 COFF 포맷의 가장 널리 사용되는 것은 Microsoft의 Portable Executable(PE; 휴대용 실행 파일) 형식입니다.Windows NT용으로 개발된 PE 형식(PE/COFF라고도 함)은 오브젝트 파일에는 COFF 헤더를 사용하고 [3]실행 파일에는 PE 헤더의 컴포넌트로 사용합니다.

특징들

a.out에 비해 COFF의 주요 개선점은 객체 파일에 여러 개의 명명된 섹션이 추가되었다는 것입니다.오브젝트 파일마다 섹션의 수와 유형이 다를 수 있습니다.

심볼릭 디버깅 정보

COFF 심볼 디버깅 정보는 프로그램 함수 및 변수의 심볼(문자열) 이름과 중단점 설정 및 트레이스 실행에 사용되는 라인 번호 정보로 구성됩니다.

심볼 이름은 COFF 기호 테이블에 저장됩니다.각 기호 테이블 항목에는 이름, 저장소 클래스, 유형, 값 및 섹션 번호가 포함됩니다.짧은 이름(8자 이하)은 기호 테이블에 직접 저장되며 긴 이름은 COFF 객체의 끝에 있는 문자열 테이블에 오프셋으로 저장됩니다.

스토리지 클래스는 기호가 나타내는 유형 엔티티를 나타내며 외부 변수(C_EXT), 자동(스택) 변수(C_AUTO), 레지스터 변수(C_REG), 함수(C_FCN) 등을 포함할 수 있습니다.기호 유형은 기호 엔티티 값의 해석을 설명하고 모든 C 데이터 유형에 대한 값을 포함합니다.

적절한 옵션을 사용하여 컴파일하면 COFF 오브젝트파일에는 오브젝트파일의 텍스트섹션에 있는 각 브레이크 포인트의 행 번호 정보가 포함됩니다.회선번호 정보는 두 가지 형식이 있습니다.첫 번째는 코드 내의 각 브레이크 포인트에 대해 회선번호 테이블엔트리에 주소와 일치하는 회선번호가 기록됩니다.두 번째 형태에서 엔트리는 함수의 시작을 나타내는 심볼 테이블 엔트리를 식별하여 함수의 이름을 사용하여 중단점을 설정할 수 있도록 한다.

COFF는 포함된 소스의 행 번호나 디버깅 기호를 나타낼 수 없었습니다.이는 헤더파일이 호환되지 않는 확장자가 없으면 COFF 디버깅 정보를 사실상 사용할 수 없게 되는 경우입니다.

상대 가상 주소

COFF 파일이 생성될 때 일반적으로 메모리의 어디에 로드될지 알 수 없습니다.파일의 첫 번째 바이트가 로드되는 가상 주소를 이미지 기반 주소라고 합니다.나머지 파일은 반드시 연속된 블록에 로드되는 것이 아니라 다른 섹션에 로드됩니다.

Relative Virtual Address(RVA; 상대 가상 주소)는 표준 가상 주소와 혼동하지 마십시오.상대 가상 주소는 파일에 로드된 개체의 가상 주소에서 파일 이미지의 기본 주소를 뺀 값입니다.파일을 문자 그대로 디스크에서 메모리로 매핑할 경우 RVA는 오프셋과 동일하지만 실제로는 매우 이례적입니다.

RVA 용어는 이미지 파일의 개체에만 사용됩니다.메모리에 로드되면 이미지 베이스 주소가 추가되고 일반 VA가 사용됩니다.

문제

COFF 파일헤더에는 오브젝트파일이 작성된 날짜와 시각이 32비트 바이너리 정수로 저장됩니다.이는 Unix Epoch(1970년 1월1일 00:00:00 UTC) 이후 초수를 나타냅니다.2038년 1월 19일 이후에 발생한 날짜는 이 형식으로 저장할 수 없습니다.

「 」를 참조해 주세요.

메모들

  1. ^ "LIB Reference (Embedded Visual C++ Programmers Guide)". msdn.microsoft.com. Archived from the original on 2003-08-25. Retrieved 2021-02-04.
  2. ^ "IMAGE_FILE_HEADER (winnt.h) - Win32 apps". 2018-05-12. Retrieved 2021-02-06.
  3. ^ Microsoft Corporation 2006b

레퍼런스

외부 링크