a.out

위키백과 ― 우리 모두의 백과사전.


이 문서는 편집 지침에 맞춰 다듬어야 합니다. 이 문서를 정리해 주세요.

a.out은 옛 유닉스 계통운영체제에서 쓰이던 실행 파일, 목적 파일 형식이다. 나중에는 공유 라이브러리 형태로 쓰였다. a.out은 어셈블러 출력이라는 의미이다. 컴파일러에 출력 파일 이름을 명시하지 않았을 때 기본적으로 a.out이라는 파일 이름이 쓰이는데 그렇다고 해서 이 파일의 형식이 반드시 a.out 형식인 것은 아니다.

a.out 은 특정 컴파일러/링커에 의해서 특정한 이름이 부여되지 않았을 때 기본값으로 세팅되있는 ouput 파일 이름이다.

[편집] 사용

PDP-11 에서 사용되는 a.out 형식과 비슷한 PDP-7에서 사용되는 a.out 형식은 UNIX 첫 번째 버전에서 나온다. 후에, AT&T 유닉스 시스템 V 의 COFF로 대체되고, 다시 System V Release 4 의 ELF 형식으로 대체 된다. 한동안 버클리 유닉스는가 a.out 형식을 계속 사용했지만, 현재 SSD시스템은 ELF로 바꿨고, NetBSD/i386도 공식적으로 1.5 릴리즈에서 a.out 에서 ELF로 바꿨다. FreeBSD/i386 은 2.2~3.0 으로 바꾸는 동안 ELF로 바꿨다.

a.out 형식은 디버그에 대한 정보를 위한 직접적인 지원이 없었지만, 데이터를 저장하는 special symbol table entries에 사용되는 stabs로 지원되긴 했다.

리눅스는 또한 커널 버전1.2까지는 a.out을 사용했다.(ELF는 experimental 1.1.52 에 추가되었다) 리눅스가 ELF로 바꾸는데는 더도말고 플랫폼에 있는 라이브러리를 공유하는데 있어서 a.out을 만들 때 복잡한 특징 때문이었다. a.out의 플랫폼은 공유라이브러리 재배치가 불가능 할 때, 중앙 권한과 함께 라이브러리가 있는 가상주소공간을 등록해야만 했다. 리눅스가 ELF로 바꾼 이후에도 많은 BSD 사용자들은 계속해서 a.out 을 사용했다. 리눅스와 비교해서 BSD의 a.out 형식은 다소 유연성이 있었기 때문이다.

[편집] 형식

a.out 은 주로 OMAGIC, NMAGIC, QMAGIC, ZMAGIC 중 한가지에서 실행 가능하다. QMAGIC 형식은 헤더 다음에 계속 되는 세그먼트를 가지고 있으며, 텍스트와 데이터를 구분하지 않는다. NMAGIC 형식은 QMAGIC과 비슷하지만 데이터 세그먼트가 텍스트 세그먼트 바로 뒤에 로드 되있고, 텍스트 세그먼트는 읽기 전용이다. ZMAGIC 형식은 페이지요구를 위한 기능이 추가되었다. 그리고 QMAGIC은 a.out 헤더가 텍스트 세그먼트의 첫 번째 페이지와 합쳐지도록 만들었는데, 이 것은 주로 메모리를 절약하게 했다. QMAGIC 바이너리는 주로 가상주소공간의 아랫 부분 위쪽에 한 개의 페이지에 로드 되었는데, 이것은 세그먼트 폴트의 경우 널포인터의 trap을 위한 것이다.

a.out 파일은 7개의 구역으로 나눠져 있다.

exec 헤더
이 구역은 메모리에 바이너리 파일을 로드하거나 실행하기 위해서, 커널에 의해서 사용되는 파라메터들을 포함하고 있다. 이 구역은 필수적인 구역이다.
text 세그먼트
이 구역은 프로그램이 실행 될 때 메모리에 로드 된 연관된 데이터나 기계코드를 포함하고 있다. 읽기전용으로 로드 된다.
data 세그먼트
이 구역은 초기화된 데이터를 포함하고 있다. 항상 쓰기 가능한 메모리에 로드된다.
text 재배치
이 구역은 바이너리 파일이 조합될 때 텍스트에 있는 포인터를 업데이트하기 위해서 링크 에디터에 의해서 사용된 기록을 포함하고 있다.
data 재배치
text 재배치 구역과 비슷하지만, data 세그먼트 포인터가 없다.
symbol table
이 구역은 링크 에디터에 의해서 바이너리 파일 사이에서 이름 지어진 변수나 함수(functions)의 주소들의 기록을 포함하고있다.
string table
이 구역은 symbol names 과 비슷한 스트링들을 포함하고 있다.

[편집] 바깥 고리