a.out

위키百科, 우리 모두의 百科事典.

a.out 은 過去 유닉스 系統 運營 體制 에서 使用하던 實行 파일 目的 파일 形式이다. 以後에는 共有 라이브러리 形式으로도 使用되었다. a.out이라는 이름은 어셈블러 出力(assembler output)을 줄인 말이다.

a.out을 使用하던 大部分의 運營 體制는 以後 ELF 形式으로 代替하였다. 現在 a.out라는 名稱은 몇몇 컴파일러 링커 에서 出力 파일名 基本값으로 使用되는 것에서 痕跡을 찾을 수 있다.

歷史 [ 編輯 ]

UNIX 첫 番째 버전은 PDP-7 에서 使用되었고, 이때 a.out의 初期 形式이 登場했다. 以後 PDP-11 에서 形式이 若干 改善되었다.

以後 AT&T 유닉스 시스템 V 에서는 COFF 形式으로 代替되었고, 릴리즈 4 에서 ELF 形式으로 代替되었다.

BSD 系列에서는 a.out 形式을 比較的 오래 使用했지만, 結果的으로 大部分의 BSD 運營體制는 ELF 形式을 使用하기 始作했다. NetBSD/i386 은 1.5 릴리즈에서, 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 과 비슷한 스트링들을 包含하고 있다.

外部 링크 [ 編輯 ]