COFF

COFF(Common Object File Format)는 유닉스 시스템에 사용되는 실행 파일, 목적 파일, 공유 라이브러리 컴퓨터 파일을 위한 포맷이다. 유닉스 시스템 V에 처음 도입되었고 이전에 사용된 A.out 포맷을 대체하였으며 SVR4와 함께 도입된 ELF로 크게 대체되기 전까지 XCOFF, ECOFF 등의 확장 사양을 위한 토대를 형성하였다. COFF와 그 변종들은 일부 유닉스 계열 시스템, 마이크로소프트 윈도우(PE 포맷), EFI 환경, 그리고 일부 임베디드 개발 시스템에 계속 사용되고 있다.

역사 
오리지널 유닉스 오브젝트 파일 포맷 a.out은 공유 라이브러리, 외부 포맷 식별, 명시적인 주소 연결을 적절하게 지원하는 것이 불가능하다. 유닉스 계열 시스템이 AT&T 안팎으로 계속 개발되면서 이것과 다른 문제들에 대한 각기 다른 해결책들이 등장하였다.

COFF는 1983년 AT&T의 유닉스 시스템 V에서 3B20 등 비VAX 32비트 플랫폼용으로 도입되었다. 기존 AT&T a.out 포맷의 개선사항은 임의의 섹션들, 명시적인 프로세서 선언, 명시적인 주소 연결을 포함하였다.

그러나 COFF의 설계는 너무 제한적이고 불완전하게 명세화되었다. 최대 섹션 수의 제한, 섹션 이름의 제한이 있으며 포함 소스 파일, 심볼 디버깅 정보는 C 등의 실제 쓰이는 언어, C++ 등 더 새로운 언어 및 새로운 프로세서를 지원하는 것이 불가능했다. 그 결과 실제 쓰이는 모든 COFF 구현체들은 필연적으로 표준 위반이 될 수밖에 없었다. 이로 말미암아 수많은 COFF 확장들이 생겨났다. IBM은 XCOFF 포맷을 AIX에 사용하였다. DEC, SGI 등은 ECOFF를 사용하였다. 임베디드 개발을 대상으로 하는 수많은 SysV 포팅 및 도구 체인들은 자신들만의 비호환 변종들을 개발하였다.

SVR4 릴리스와 함께 AT&T는 COFF를 ELF로 대체하였다.

COFF 확장 버전들이 일부 유닉스 플랫폼(주로 임베디드 시스템)에 계속 사용되고 있으나 오늘날 가장 널리 사용되는 COFF 포맷은 마이크로소프트의 PE 포맷이다. 윈도우 NT용으로 개발된 PE 포맷(PE/COFF라고도 부름)은 오브젝트 파일에 대해 COFF 헤더를 사용하며 실행 파일에 대해 PE 헤더 구성 요소로 사용한다.

문제 
객체 파일이 생성된 날짜와 시간을 저장하고 있는 COFF 파일 헤더는 32비트 이진 정수로 생성되므로 유닉스 시간 이후 초의 수 1 January 1970 00:00:00 UTC를 대표한다. 2038년 1월 19일 이후의 시간은 이 포맷으로 저장이 불가능하다.

내용주

각주 
 MIPS COFF Spec

외부 링크 
 More on the PE Format and Public documentation at Microsoft.com

실행 파일 포맷