ファットバイナリ(またはマルチアーキテクチャバイナリ)は、複数の命令セットに固有のコードで拡張(または「ファット化」)され、複数のプロセッサタイプで実行できるコンピュータ実行可能プログラムまたはライブラリです。 [1]これにより、通常の1つのアーキテクチャのバイナリファイルよりも大きなファイルが作成されるため、この名前が付けられています。
通常の実装方法は、各命令セットのマシン コードのバージョンを組み込み、その前にすべてのオペレーティング システムと互換性のあるコードを含む単一のエントリ ポイントを配置し、適切なセクションへのジャンプを実行するというものです。別の実装では、異なる実行可能ファイルを異なるフォークに格納し、それぞれにオペレーティング システムによって直接使用される独自のエントリ ポイントがあります。
ファットバイナリの使用はオペレーティングシステムソフトウェアでは一般的ではありません。同じ問題を解決するには、インストール時にアーキテクチャ固有のバイナリを選択するインストーラプログラムの使用( Androidの複数のAPKなど)、実行時にアーキテクチャ固有のバイナリを選択する(Plan 9のユニオンディレクトリやGNUstepのファットバンドルなど)、[2] [3]ソースコード形式でソフトウェアを配布し、その場でコンパイルしたり、仮想マシン( Javaなど)を使用してジャストインタイムコンパイルを行う方法がある。
アポロ
アポロの複合実行ファイル
1988年、アポロコンピュータのDomain/OS SR10.1は、モトローラ680x0とアポロPRISM実行可能ファイルのバイナリをバンドルした新しいファイルタイプ「cmpexe」(複合実行可能ファイル)を導入しました。[4]
りんご
Appleのファットバイナリ
ファットバイナリ方式は、1994年に始まったApple Macintoshの68kマイクロプロセッサからPowerPCマイクロプロセッサへの移行をスムーズにした。古いプラットフォーム用の多くのアプリケーションは、進化するエミュレーション方式の下で新しいプラットフォーム上で透過的に実行されたが、エミュレートされたコードは一般にネイティブコードよりも遅く実行された。「ファットバイナリ」としてリリースされたアプリケーションはより多くのストレージスペースを占有したが、どちらのプラットフォームでもフルスピードで実行された。これは、同じプログラムの68000コンパイルバージョンとPowerPCコンパイルバージョンの両方を実行ファイルにパッケージ化することで実現された。 [5] [6]古い68Kコード(CFM-68Kまたはクラシック68K)は引き続きリソースフォークに格納され、新しいPowerPCコードはPEF形式でデータフォークに含まれていた。[7] [8] [9]
ファットバイナリはPowerPCや68kのみをサポートするプログラムよりもサイズが大きいため、不要なバージョンを削除するユーティリティが数多く開発されました。[5] [6] 80MBのハードドライブが一般的だった小型ハードドライブの時代には、プログラムコードがドライブ全体の使用量の大きな割合を占めていたため、これらのユーティリティが役立つことがあり、ファットバイナリの不要なメンバーを削除すると、ハードドライブ上のかなりの容量が解放されました。
NeXT/Apple のマルチアーキテクチャバイナリ
NeXTSTEP マルチアーキテクチャバイナリ
ファットバイナリは、 NeXTのNeXTSTEP / OPENSTEPオペレーティングシステムの機能であり、NeXTSTEP 3.1 から始まりました。NeXTSTEP では、「マルチアーキテクチャバイナリ」と呼ばれていました。マルチアーキテクチャバイナリは元々、ソフトウェアをコンパイルして、NeXT の Motorola 68k ベースのハードウェアと、NeXTSTEP を実行している Intel IA-32ベースのPCの両方で実行できるようにすることを目的としていました。両方のプラットフォーム用の単一のバイナリファイルがありました。[10]これは後に、OPENSTEP アプリケーションを PC と OPENSTEP がサポートするさまざまなRISCプラットフォームで実行できるようにするために使用されました。マルチアーキテクチャバイナリファイルは特別なアーカイブ形式であり、1 つのファイルに、マルチアーキテクチャバイナリでサポートされている各アーキテクチャの1 つ以上のMach-Oサブファイルが格納されます。すべてのマルチアーキテクチャバイナリは、2 つの符号なし整数を含む構造体 ( ) で始まります。最初の整数 (「マジック」) は、このファイルをファットバイナリとして識別するためのマジックナンバーstruct fat_headerとして使用されます。 2 番目の整数 ( nfat_arch ) は、アーカイブに含まれる Mach-O ファイルの数 (異なるアーキテクチャの同じプログラムのインスタンスの数) を定義します。このヘッダーの後には、nfat_arch個の fat_arch 構造体 ( ) があります。この構造体は、ファイルを検索するオフセット (ファイルの先頭から)、アラインメント、サイズ、および Mach-O バイナリ (アーカイブ内) が対象とする CPU タイプとサブタイプを定義します。
struct fat_arch
開発ツールに同梱されているGNU コンパイラ コレクションのバージョンでは、NeXTStepが実行できるさまざまなアーキテクチャのソース コードをクロスコンパイルできました。たとえば、複数の '-arch' オプション (アーキテクチャを引数として指定) を使用してターゲット アーキテクチャを選択できました。これは、さまざまなアーキテクチャで実行される NeXTStep のプログラムを配布する便利な方法でした。
異なるターゲット オブジェクト ファイルを使用して ライブラリを作成することも可能でした (たとえば、NeXTStep のlibtoolを使用)。
Mach-O と Mac OS X
アップルコンピュータは1996年にNeXTを買収し、OPENSTEPコードを使い続けた。Mach-Oはアップルの無料のDarwinオペレーティングシステム(2000年)とアップルのMac OS X(2001年)のネイティブオブジェクトファイル形式となり、NeXTのマルチアーキテクチャバイナリはオペレーティングシステムで引き続きサポートされた。Mac OS Xでは、マルチアーキテクチャバイナリを使用して、たとえばPowerPC G3、PowerPC G4、およびPowerPC 970世代のプロセッサに最適化された32ビットコードの異なるバージョンを持つなど、アーキテクチャの複数のバリアントをサポートできる。また、32ビットと64ビットのPowerPC、PowerPCとx86、x86-64とARM64など、複数のアーキテクチャをサポートするためにも使用できる。[11]
Appleのユニバーサルバイナリ

2005年、AppleはPowerPCプロセッサからIntel x86プロセッサへの新たな移行を発表しました。Appleは、マルチアーキテクチャバイナリ形式の実行ファイルを使用して、PowerPCとx86の両方をネイティブにサポートする新しいアプリケーションの配布を促進しました。[12] Appleはそのようなプログラムを「ユニバーサルアプリケーション」と呼び、ファイル形式を「ユニバーサルバイナリ」と呼んでいますが、これはおそらく、この新しい移行を以前の移行やマルチアーキテクチャバイナリ形式の他の用途と区別する方法です。
ユニバーサルバイナリ形式は、既存のネイティブ PowerPC アプリケーションのフォワードマイグレーションには必要ありませんでした。2006 年から 2011 年にかけて、Apple は、この役割を果たすために、PowerPC (PPC) から x86 への動的バイナリトランスレータであるRosetta を提供しました。ただし、Rosetta のパフォーマンスオーバーヘッドはかなり急であったため、開発者はユニバーサルバイナリを使用して、PPC と Intel の両方のバイナリを提供するように推奨されました。ユニバーサルバイナリの明らかなコストは、インストールされるすべての実行可能ファイルが大きくなることですが、PPC のリリースから数年の間に、ハードドライブの容量は実行可能ファイルのサイズを大幅に上回っています。ユニバーサルバイナリは、同じアプリケーションの単一プラットフォームバージョンの 2 倍のサイズになる可能性がありますが、空き領域リソースは一般にコードサイズをはるかに上回るため、これは小さな問題になります。実際、プログラムリソースを重複させるのではなく共有できるため、ユニバーサルバイナリアプリケーションは、2 つの単一アーキテクチャアプリケーションよりも小さくなることがよくあります。すべてのアーキテクチャが必要でない場合は、lipoおよびdittoコマンドライン アプリケーションを使用して、マルチアーキテクチャ バイナリ イメージからバージョンを削除し、いわゆる「シン バイナリ」を作成できます。
さらに、マルチアーキテクチャ バイナリ実行可能ファイルには、PowerPC および x86 の 32 ビット バージョンと 64 ビット バージョンの両方のコードを含めることができるため、アプリケーションは 32 ビット プロセッサをサポートする形式で出荷され、64 ビット プロセッサで実行されるときには、より大きなアドレス空間とより広いデータ パスを利用できます。
Xcode開発環境のバージョン2.1 から 3.2 ( Mac OS X 10.4からMac OS X 10.6で実行) では、アプリケーションを Intel と PowerPC の両方のアーキテクチャを対象にできるようにするユーティリティが Apple に含まれていました。ユニバーサル バイナリには、最終的に最大 4 つのバージョンの実行可能コード (32 ビット PowerPC、32 ビット x86、64 ビット PowerPC、および64 ビット x86 ) を含めることができます。ただし、PowerPC サポートは Xcode 4.0 から削除されたため、 Mac OS X 10.7以降を 実行している開発者は利用できません。
2020年に、AppleはIntel x86プロセッサからAppleシリコン(ARM64アーキテクチャ)への新たな移行を発表しました。移行をスムーズにするために、AppleはUniversal 2バイナリ形式のサポートを追加しました。Universal 2バイナリファイルは、x86-64とARM64の両方の実行可能コードを含むマルチアーキテクチャバイナリファイルであり、バイナリを64ビットIntelと64ビットAppleシリコンの両方でネイティブに実行できます。さらに、Appleはx86からArm64命令セットへのRosetta 2動的バイナリ変換を導入し、ユーザーがUniversalバイナリバリアントを持たないアプリケーションを実行できるようにしました。
Apple Fat EFI バイナリ
2006年、AppleはPowerPCからIntel CPUに切り替え、Open FirmwareをEFIに置き換えました。しかし、2008年までに、一部のMacは32ビットEFIを使用し、一部は64ビットEFIを使用するようになりました。このため、Appleは32ビットと64ビットの両方のEFIバイナリを含む「ファット」バイナリでEFI仕様を拡張しました。[13]
CP/M と DOS
CP/M-80 と DOS 用の COM スタイルバイナリの組み合わせ
Intel 8080 (およびZilog Z80 ) プロセッサ ファミリ用のCP/M-80、MP/M-80、Concurrent CP/M、CP/M Plus、Personal CP/M-80、SCPおよびMSX-DOS実行ファイルは、 Intel 8086バイナリ用のDOS互換オペレーティング システムと同じ.COMファイル拡張子を使用します。[注 1]どちらの場合も、プログラムはオフセット +100h にロードされ、ファイルの最初のバイトにジャンプして実行されます。[14] [15] 2 つのプロセッサ ファミリのオペコードには互換性がないため、間違ったオペレーティング システムでプログラムを起動しようとすると、誤った予測できない動作が発生します。
これを回避するために、CP/M-80 と DOS プログラムの両方を含み、両方のプラットフォームで正しく解釈される初期コードが先行するファットバイナリを作成する方法がいくつか考案されています。[15]これらの方法では、それぞれ対応する環境用に構築された 2 つの完全に機能するプログラムを組み合わせるか、間違ったプロセッサで起動された場合にプログラムが正常に終了するようにするスタブを追加します。これが機能するには、.COM ファイルの最初のいくつかの命令 (ガジェット ヘッダー[16]と呼ばれることもあります) が 8086 プロセッサと 8080 プロセッサの両方で有効なコードである必要があり、これによりプロセッサがコード内の異なる場所に分岐します。[16] たとえば、Simeon Cran のエミュレータ MyZ80 のユーティリティは、オペコード シーケンスEBh、52h、EBhで始まります。[17] [18] 8086はこれをジャンプとみなし、次の命令をオフセット+154hから読み取りますが、8080または互換プロセッサはそのまま進み、次の命令を+103hから読み取ります。この目的で使用される同様のシーケンスは、EBh、03h、C3hです。[19] [20] John C. ElliottのFATBIN [21] [22] [23]は、CP/M-80とDOS .COMファイルを1つの実行可能ファイルに結合するユーティリティです。[17] [24]オリジナルのPMsfxの派生版は、美濃喜彦のPMarcによって作成されたアーカイブを、 EBh、18h、2Dh、70h、6Dh、73h、2Dhで始まり、自己解凍型PMAアーカイブの「-pms-」署名も含め、CP/M-80とDOSの両方で自己解凍可能になるように変更し、[ 25 ] [ 17 ] [ 24 ] [ 18]実行可能なASCIIコードの形式も表しています。
DOS互換のオペレーティングシステムがCP/M-80およびMSX-DOSマシン用の.COMプログラムを誤って実行しないようにする別の方法[15]は、 8080コードをC3h、03h、01hで開始することです。これはx86プロセッサによって「RET」命令としてデコードされ、プログラムを正常に終了します。 [注2]一方、8080プロセッサでは「JP 103h」命令としてデコードされ、プログラム内の次の命令にジャンプします。同様に、SLR SystemsのCP/MアセンブラZ80ASM+は、DOSで誤って実行されるとエラーメッセージを表示します。[17]
CP/M-80 3.0 .COM ファイルの中には、 GENCOMによって1 つ以上のRSXオーバーレイが添付されているものがあります。[26]その場合、256 バイトのヘッダー (1ページ) が追加されます。これを示すために、ヘッダーの最初のバイトはマジック バイトC9hに設定されています。これは、CP/M 3.0実行可能ローダーに対してこのタイプの COM ファイルを識別する署名として機能するだけでなく、8080 互換プロセッサの "RET" 命令としても機能し、ファイルが古いバージョンの CP/M-80 で実行された場合に正常に終了します。[注 2]
C9h は、どの x86 プロセッサでもプログラムの最初のバイトとして適切ではありません (世代によって意味が異なりますが、[注 3]決して意味のある最初のバイトではありません)。DOS の一部のバージョンの実行可能ローダーは、 C9hで始まる COM ファイルを拒否し、誤った操作を回避します。
同様の重複コードシーケンスは、Z80/ 6502 [17]、8086/ 68000 [17]、またはx86/ MIPS / ARMバイナリの組み合わせでも考案されています。[16]
CP/M-86 と DOS の結合バイナリ
CP/M-86と DOS は、実行可能ファイルの拡張子を共有していません。[注 1]そのため、通常、実行可能ファイルを混同することはありません。ただし、DOS の初期バージョンは、アーキテクチャの点で CP/M と非常に多くの共通点があったため、初期の DOS プログラムの中には、実行可能コードを含むバイナリを共有するように開発されたものもありました。これを実現していたプログラムとして知られているのはWordStar 3.2xで、 CP/M-86 とMS-DOSへの移植で同一のオーバーレイ ファイルを使用し、[27 ]実行時にこれらのオペレーティング システムの異なる呼び出し規約に適応するために、動的に修正されたコードを使用していました。[27]
Digital ResearchのCP/M-86およびDOS用のGSXもバイナリ同一の16ビットドライバを共有しています。[28]
COMファイルとSYSファイルの結合
DOSデバイス ドライバ(通常はファイル拡張子が.SYS ) は、ファイル ヘッダーで始まります。ファイル ヘッダーの最初の 4 バイトは慣例によりFFFFFFFFhですが、これは必須ではありません。[29]これは、ドライバがロードされるときにオペレーティング システムによって動的に修正されます(通常はDOS BIOSでCONFIG.SYSのDEVICEステートメントを実行するときに修正されます)。DOS は、DEVICE ごとにロードされる .COM 拡張子のファイルを拒否せず、FFFFFFFFh をテストしないため、ファイルの最初の 4 バイト (通常は 3 バイトで十分) 内に埋め込まれた COM プログラムのエントリ ポイントへのジャンプ命令を配置することにより、COM プログラムとデバイス ドライバを同じファイルに結合できます [30] [29]。[29]埋め込まれたプログラムとデバイス ドライバのセクションが共通のコード部分またはデータを共有する場合、コードは、.COM スタイル プログラムとしてオフセット +0100h にロードされ、デバイス ドライバとして +0000h にロードされることを処理する必要があります。[30]「間違った」オフセットでロードされたが、位置に依存しないように設計されていない共有コードの場合、内部アドレスの修正[30]が必要になります。これは、再配置ローダーによってすでに実行されているものと同様ですが、この場合は、ロードされたプログラム自体によって実行する必要があるという点が異なります。これは、自己再配置ドライバーの場合と似ていますが、プログラムはオペレーティングシステムのローダーによってすでにターゲットの場所にロードされています。
クラッシュ保護されたシステムファイル
DOS では、慣例により、一部のファイルには実際のファイル タイプを反映しないファイル拡張子が付けられます。[nb 4]たとえば、COUNTRY.SYS [31]は DOS デバイス ドライバーではなく、[nb 5] CONFIG.SYS COUNTRY ディレクティブおよびNLSFUNCドライバーで使用するバイナリNLSデータベース ファイルです。[31]同様に、PC DOSおよびDR-DOSシステム ファイルIBMBIO.COMおよびIBMDOS.COM は、ブートストラップ ローダーによってロードされる特殊なバイナリ イメージであり、COM スタイルのプログラムではありません。[nb 5] DEVICE ステートメントを使用して COUNTRY.SYS をロードしようとしたり、コマンド プロンプトで IBMBIO.COM または IBMDOS.COM を実行したりすると、予期しない結果が発生します。[nb 4] [nb 6]
前述のような技術を利用することで、これを回避できる場合もあります。たとえば、DR-DOS 7.02以降には、Matthias R. Paul が開発した安全機能が組み込まれています。[32]これらのファイルが不適切に呼び出されると、埋め込まれた小さなスタブがファイルのバージョン情報を表示して正常に終了します。[33] [32] [34] [31]さらに、メッセージは、外部のNetWare & DR-DOS VERSIONファイル識別ユーティリティによって認識される特定の「魔法の」パターンに従うように特別に作成されています。[31] [32] [nb 7]
同様の保護機能として、ジェイ・セージとジョー・ライトのZシステムタイプ3およびタイプ4の「Z3ENV」プログラム[35] [36]と「Z3TXT」言語オーバーレイファイル[37]の冒頭にある8080命令C7h (「RST 0」)があり、不適切にロードされた場合、CP/M-80では(クラッシュではなく)ウォームブートが発生します。 [35] [36] [37] [注2]
これに非常によく似た方法で、多くの (バイナリ)ファイル形式には、慣例により、ファイルの先頭近くに1Ahバイト ( ASCII ^Z ) が含まれています。この制御文字は、ファイルが非バイナリ モードで開かれたときに「ソフト」ファイル終了(EOF) マーカーとして解釈されるため、多くのオペレーティング システム ( PDP-6モニター[38]およびRT-11、VMS、TOPS-10、[39] CP/M、[40] [41] DOS、[42] Windows [43]を含む) では、ファイルが誤ってコンソールに印刷されても「バイナリ ガベージ」が表示されるのを防ぎます。
リナックス
FatELF: Linux 用のユニバーサルバイナリ

FatELF [44]は、 Linuxやその他のUnix系オペレーティングシステム用のファットバイナリ実装でした。技術的には、FatELFバイナリは、どのバイナリをどのアーキテクチャで使用するかを示すメタデータを含むELFバイナリの連結でした。 [45] CPUアーキテクチャの抽象化(バイトオーダー、ワードサイズ、CPU命令セットなど)に加えて、複数のカーネルABIとバージョンをサポートするバイナリの利点があります。
開発者によると、FatELFにはいくつかの使用例がある。[44]
- ディストリビューションでは、さまざまなプラットフォームごとに個別のダウンロードを行う必要がなくなりました。
- OS ディレクトリ構造では、分離された/lib、/lib32、および/lib64ツリーは不要になりました。
- 正しいバイナリとライブラリは、シェル スクリプトではなくシステムによって集中的に選択されます。
- 将来 ELF ABI が変更された場合でも、従来のユーザーは引き続きサポートされます。
- 複数のプラットフォームですぐに使用できる Web ブラウザー プラグインの配布。
- プラットフォーム互換性レイヤーなしで、Linux およびBSD OSバリアント間で動作する 1 つのアプリケーション ファイルの配布。
- 開発や実験のために、1 つのハード ドライブ パーティションを、異なる CPU アーキテクチャを持つ異なるマシンで起動できます。同じルート ファイル システム、異なるカーネルおよび CPU アーキテクチャ。
- ネットワーク共有やUSBスティックで提供されるアプリケーションは、複数のシステムで動作します。これは、ポータブルアプリケーションや異機種システム用のクラウドコンピューティングイメージの作成にも役立ちます。[46]
概念実証用のUbuntu 9.04イメージが利用可能である。[47] 2021年現在[アップデート]、FatELFはメインラインのLinuxカーネルに統合されていない。[要出典] [48] [49]
ウィンドウズ
ファットパック
Windows が使用するPortable Executable形式では、コードをプラットフォームに割り当てることはできませんが、アーキテクチャに基づいてディスパッチするローダー プログラムを作成することは可能です。これは、ARM 上の Windows のデスクトップ バージョンが 32 ビットx86エミュレーションをサポートしているため、便利な「ユニバーサル」マシン コード ターゲットとなるためです。Fatpack は、この概念を示すローダーです。これには、リソース セクションにパックされた実行可能ファイルを 1 つずつ実行しようとする 32 ビット x86 プログラムが含まれています。[50]
アーム64X
Windows 11 ARM64を開発する際、マイクロソフトはArm64Xと呼ばれるPortable Executable形式を拡張する新しい方法を導入しました。 [51] Arm64Xバイナリには、x64/Arm64ECとArm64バイナリに分かれているすべてのコンテンツが含まれていますが、ディスク上の1つのより効率的なファイルに統合されています。Visual C++ツールセットは、このようなバイナリの作成をサポートするようにアップグレードされました。また、Arm64Xバイナリの構築が技術的に難しい場合、開発者は代わりにArm64XピュアフォワーダーDLLを構築できます。[52]
類似の概念
次のアプローチは、同じ目的のマシン コードの複数のバージョンが同じファイルに提供されるという点で、ファット バイナリに似ています。
異機種コンピューティング
2007年以降、異種プラットフォーム向けの特殊なコンパイラの中には、複数の種類のプロセッサ上で並列実行するためのコードファイルを生成するものがあります。たとえば、 Intel EXOCHI(Exoskeleton Sequencer)開発スイートのCHI(C for Heterogeneous Integration)コンパイラは、マルチスレッド用のOpenMPプラグマの概念を拡張して、異なる命令セットアーキテクチャ(ISA)のコードセクションを含むファットバイナリを生成します。これにより、ランタイムローダーは、異種システム環境内の複数の利用可能なCPUおよびGPUコア上で並列実行を動的に開始できます。 [53] [54]
2006 年に導入されたNvidiaの並列コンピューティング プラットフォームCUDA (Compute Unified Device Architecture) は、GPU ( GPGPU )上で汎用コンピューティングを可能にするソフトウェアです。LLVMベースのコンパイラNVCC は、いわゆるPTX仮想アセンブリ(テキストとして) を含む ELF ベースのファット バイナリを作成できます。CUDA ランタイム ドライバーは、これを後で実際に存在するターゲット GPU 用の SASS (Streaming Assembler) バイナリ実行可能コードにジャストインタイム コンパイルできます。実行可能ファイルには、CUDA ランタイムがロード時に選択できる 1 つ以上の特定の GPU アーキテクチャ専用の実行可能コード セクションを含む、いわゆる CUDAバイナリ(別名cubinファイル) を含めることもできます。 [55] [56] [57] [ 58] [59] [60]ファット バイナリは、2007 年に導入された GPUシミュレーターGPGPU-Sim でもサポートされています。[61] [62]
Multi2Sim (M2S)は、OpenCL異種システムシミュレータフレームワークです(当初はMIPSまたはx86 CPUのみに対応していましたが、後にAMD / ATI EvergreenやSouthern Islands 、 Nvidia FermiやKeplerファミリーなどのARM CPUとGPUもサポートするように拡張されました)[63]は、 ELFベースのファットバイナリもサポートしています。[64] [63]
太った物体
GNUコンパイラコレクション(GCC)とLLVMにはファットバイナリフォーマットはありませんが、リンク時最適化(LTO)用のファットオブジェクトファイルはあります。LTOはコンパイルをリンク時に遅らせるため、オブジェクトファイルは中間表現(IR)を格納する必要がありますが、一方でマシンコードも格納する必要がある場合があります(速度や互換性のため)。IRとマシンコードの両方を含むLTOオブジェクトはファットオブジェクトと呼ばれます。[65]
関数のマルチバージョン化
同じ命令セットアーキテクチャ向けのプログラムやライブラリであっても、プログラマは古いCPUとの互換性を保ちながら、新しい命令セット拡張機能を利用したい場合がある。これは関数マルチバージョン化(FMV)によって実現できる。同じ関数の複数のバージョンがプログラムに書き込まれ、コードの一部がCPUの能力を検出して( CPUIDなどを通じて)どのバージョンを使用するかを決定する。Intel C++コンパイラ、GCC、LLVMはすべて、マルチバージョン関数を自動的に生成する機能を備えている。[66]これは、意味的な影響を伴わない動的ディスパッチの一形態である。
多くの数学ライブラリは、CPUの能力に応じて自動的に選択される手書きのアセンブリルーチンを備えています。例としては、 glibc、Intel MKL、OpenBLASなどがあります。さらに、glibcのライブラリローダーは、特定のCPU機能の代替パスからのロードをサポートしています。[67]
Matthias R. Paul と Axel C. Frinke が考案した、同様の、しかしバイトレベルの粒度の高いアプローチは、実行ファイルに埋め込まれた小さな自己破棄、緩和、再配置ローダーを、任意の数の代替バイナリコードスニペットとともに、動的デッドコード除去 (DDCE) の形式を通じて、ロード時に特定のターゲット環境で特定の機能を実行する (または実行しない) ために必要なプログラムまたはドライバーのサイズまたは速度が最適化されたランタイムイメージを条件付きで構築するというものである。[68] [69] [70] [71]
参照
- クロスプラットフォームソフトウェア
- DOS スタブ
- ファットポインタ
- リニア実行可能ファイル(LX)
- 新しい実行ファイル(NE)
- ポータブル実行可能ファイル(PE)
- 位置独立コード(PIC)
- 副作用
- ユニバーサル 16 進形式、複数のプラットフォームを対象とした「ファット」 16 進ファイル形式
- 英数字の実行可能ファイル、実行可能コードをテキスト(場合によっては判読可能なテキスト)として偽装したもの
- マルチアーキテクチャ シェルコード、複数のプラットフォームをターゲットとするシェルコード (場合によっては英数字のテキストに偽装される)
注記
- ^ ab CP/M-86、CP /M-86 Plus、Personal CP/M-86、S5-DOS、Concurrent CP/M-86、Concurrent DOS、Concurrent DOS 286、FlexOS、Concurrent DOS 386、DOS Plus、Multiuser DOS、System Manager、およびREAL/32の CP/M-86 スタイルの実行可能ファイルでは、ファイル拡張子.COMではなく.CMDが使用されるため、これは問題になりません。(ただし、.CMD 拡張子は、 OS/2およびWindows NTオペレーティング システム ファミリのコマンド ライン プロセッサCMD.EXE用に作成されたバッチジョブのファイル拡張子と競合します。)
- ^ abc CP/M-80、CP/M-86、DOSでは、オペコード、正確な条件、基本的なメカニズムは異なりますが、 (適切な)戻り命令を使用してプログラムを終了できるため、これが機能します。 CP/M-80 では、プログラムは、ゼロ ページの 0 にジャンプすることで終了できます(つまり、 BIOSにウォーム ブートします)。ジャンプするには、RST 0(8080 / 8085 / Z80オペコード C7h)を直接使用するか、 CALL 5インターフェイスを介してBDOS関数 0 を呼び出します。 あるいは、スタックは、ロードされたプログラムに制御を渡す前に 0 の戻りアドレスを保持する準備ができているため、スタックがフラットである限り、RET(オペコード C9h)命令を発行してゼロ ページのオフセット 0 にある終了コードに入ることによっても終了できます。 DOS には、プログラムを終了するための専用のINT 20h割り込みとINT 21h APIサブ関数がありますが (より複雑なプログラムに適しています)、機械翻訳されたプログラムの場合、DOS は CP/M の動作もある程度エミュレートします。プログラムは、システムが以前に INT 20h 命令を埋め込んだPSPのオフセット 0 (CP/M のゼロ ページに相当) にジャンプすることで、自身を終了できます。また、ロードされたプログラムの初期スタックは 0 ワードを保持するように準備されているため、ニア リターン RETN (8088/8086 オペコード C3h) を発行するプログラムは、暗黙的にコード セグメントの先頭にもジャンプし、最終的には INT 20h にも到達します。[a] CP/M-86 では、ゼロ ページの構造が異なり、CALL 5 インターフェイスはありませんが、スタック リターン メソッドと BDOS 関数 0 (ただし、 INT E0h経由) はどちらも同様に機能します。
- ^ 8088/8086プロセッサでは、オペコードC9hはCBh ("RETF"、スタックからCS :IP をポップする)の文書化されていないエイリアスですが、 80188 / 80186以降のプロセッサでは" LEAVE" (SP を BP に設定し、BP をポップする) としてデコードされます。
- ^ abこの問題は競合しない ファイル拡張子を選択することで回避できたはずですが、一度導入されると、これらの特定のファイル名は、これらの特定のファイル名を期待するようにハードワイヤードされた(サードパーティの) ツールとの互換性上の理由から、 MS-DOS / PC DOSの非常に初期のバージョンから保持されました。
- ^ abこのタイプの 他のDOSファイルには、MS-DOSおよびPC DOSのキーボード ドライバーKEYB用のバイナリキーボード レイアウトデータベース ファイルであるKEYBOARD.SYS、MS-DOS のDOS BIOSを含むIO.SYS 、およびWindows 95 / MS-DOS 7.0以降ではテキスト構成ファイルであるが、元は MS-DOSカーネルを含むバイナリ システム ファイルであるMSDOS.SYSがあります。ただし、 MS-DOS および PC DOS はクラッシュ保護されたシステム ファイルをまったく提供せず、これらのファイル名は DR-DOS 7.02 以降では使用されず、必要もありません。DR-DOS 7.02 以降では、クラッシュ保護されたシステム ファイルが提供されます。
- ^これらのファイルに 隠し属性が設定され、デフォルトではリストされないようにし、誤って呼び出されるリスクを軽減しているのはこのためです。
- ^ MS-DOS / PC DOSおよびDR-DOSファミリーのオペレーティング システムでサポートされているファイル形式には、類似したデータが含まれていますが、構成が異なり、互換性がありません。データ構造へのエントリ ポイントはファイル内の異なるオフセットにあるため、両方の DOS ファミリーで使用できる「ファット」データベースを作成できます。[b]ただし、DR-DOS 7.02とそのNLSFUNC 4.00 (およびそれ以降) には、両方の種類の形式 (およびバリアント) を同時に読み取ることができる改良されたパーサーが含まれているため、Janusヘッダーのファイルは必要ありません。[c] [d]それでも、出荷されたファイルは、不適切に呼び出されたときに埋め込みメッセージを表示するだけの小さな実行可能スタブを含むため、「ファット」です。[d] [b]
COUNTRY.SYSCOUNTRY.SYS
参考文献
- ^ Devanbu, Premkumar T.; Fong, Philip WL; Stubblebine, Stuart G. (1998 年 4 月 19 ~ 25 日)。「3.3 Java と TH」( PDF)。信頼できるソフトウェア エンジニアリングのテクニック。第 20 回国際ソフトウェア エンジニアリング会議の議事録。議事録 - 国際ソフトウェア エンジニアリング会議。京都、日本。p. 131。doi : 10.1109 /ICSE.1998.671109。ISBN 0-8186-8368-6. ISSN 0270-5257. 2014年1月16日時点のオリジナルよりアーカイブ(PDF) . 2021年9月29日閲覧。(10ページ)
- ^ Pero, Nicola (2008-12-18). 「gnustep/tools-make: README.Packaging」. GitHub . 2022-05-25 にオリジナルからアーカイブ。2022-05-26に取得。
- ^ 「PackagingDrafts/GNUstep」Fedora Project Wiki 2009-02-25. 2022-05-25時点のオリジナルよりアーカイブ。 2022-05-26に取得。
- ^ 「ドメイン システム ソフトウェア リリース ノート、ソフトウェア リリース 10.1」(PDF) (初版)。米国マサチューセッツ州チェルムズフォード: Apollo Computer Inc. 1988 年 12 月。p. 2-16。注文番号 005809-A03。2023年 5 月 26 日のオリジナルからアーカイブ(PDF) 。2022年 7 月 24 日閲覧。(256ページ)
- ^ ab Engst, Adam C. (1994-08-22). 「Fat Binaries Diet?」TidBITS . No. 240. TidBITS Publishing Inc. ISSN 1090-7017. 2021-09-29 時点のオリジナルよりアーカイブ。 2021-09-29に取得。
- ^ ab Engst, Adam C. (1994-08-29). 「Fat Binary Comments」. TidBITS . No. 241. TidBITS Publishing Inc. ISSN 1090-7017. 2021-09-29 時点のオリジナルよりアーカイブ。2021-09-29取得。
- ^ 「第 1 章 - リソース マネージャー / リソース マネージャー リファレンス - リソース ファイル形式」。Inside Macintosh: Mac OS ランタイム アーキテクチャ。Apple Computer。1996年 7 月 6 日。2021 年 9 月 29 日時点のオリジナルよりアーカイブ。2021年 9 月 29 日閲覧。
- ^ 「第 7 章 - ファットバイナリプログラム - ファットバイナリプログラムの作成」。Inside Macintosh: Mac OS ランタイムアーキテクチャ。Apple Computer。1997年 3 月 11 日。2021 年 9 月 29 日時点のオリジナルよりアーカイブ。2011年 6 月 20 日閲覧。[1]
- ^ 「第8章 - PEF構造」。Inside Macintosh: Mac OSランタイムアーキテクチャ。Apple Computer。1997年3月11日。2021年9月29日時点のオリジナルよりアーカイブ。 2021年9月29日閲覧。
- ^ Tevanian, Avadis; DeMoney, Michael; Enderby, Kevin; Wiebe, Douglas; Snyder, Garth (1995-07-11) [1993-08-20]. 「アーキテクチャに依存しない実行可能ファイルのための方法および装置」(PDF)。米国カリフォルニア州レッドウッドシティ: NeXT Computer, Inc.米国特許 5432937A。2020-12-14にオリジナルからアーカイブ(PDF) 。2022-05-26に取得。[2] (9 ページ); Tevanian, Avadis; DeMoney, Michael; Enderby, Kevin; Wiebe, Douglas; Snyder, Garth (1997-02-18) [1995-02-28]. 「アーキテクチャに依存しない実行可能ファイルのための方法および装置」(PDF)。米国カリフォルニア州レッドウッドシティ: NeXT Computer, Inc.米国特許 5604905A。2022-05-26にオリジナルからアーカイブ(PDF) 。2022-05-26に取得。(9ページ)
- ^ 「ユニバーサルバイナリと 32 ビット/64 ビット PowerPC バイナリ」。Mac OS X ABI Mach-O ファイル形式リファレンス。Apple Inc. 2009-02-04 [2003]。2012-04-27 にオリジナルからアーカイブ。
- ^ Singh, Amit (2006-06-19). 「2.6.2 Fat Binaries」. Mac OS X 内部 - システムアプローチ. Pearson Education . p. 66. ISBN 978-0-13270226-3. 2021年9月28日閲覧。
- ^ 「rEFIt - EFI Fat Binaries」. refit.sourceforge.net . 2022年10月18日閲覧。
- ^ Paul, Matthias R. (2002-10-07) [2000]. 「Re: COM ファイルを実行する」.ニュースグループ: alt.msdos.programmer. 2017-09-03 にオリジナルからアーカイブ。2017-09-03に取得。[3] (注:DOS COMプログラムの呼び出し規約の詳細が記載されています。)
- ^ abc Wilkinson, William "Bill" Albert (2005-04-02) [2003, 1999-02-16, 1987年2月, 1986-11-15, 1986-11-10]. Heath Company, USAで執筆。「MS-DOSとCP/Mの共通点」。REMark。第8巻第2号。米国ミシガン州セントジョセフ:Heath/Zenithユーザーズグループ(HUG)。pp. 55–57。#85。P/N 885-2085。2021年12月13日時点のオリジナルよりアーカイブ。[4]
- ^ abc Cha, Sang Kil; Pak, Brian; Brumley, David ; Lipton, Richard Jay (2010-10-08) [2010-10-04]. プラットフォームに依存しないプログラム(PDF) . Proceedings of the 17th ACM conference on Computer and Communications Security (CCS'10). Chicago, Illinois, USA: Carnegie Mellon University , Pittsburgh, Pennsylvania, USA / Georgia Institute of Technology , Atlanta, Georgia, USA. pp. 547–558. doi :10.1145/1866307.1866369. ISBN 978-1-4503-0244-9. 2022年5月26日時点のオリジナルよりアーカイブ(PDF) . 2022年5月26日閲覧。[5] (12ページ) (参照: [6])(注: CP/MおよびDOSの場合のように、8080と8086 の 命令セット アーキテクチャのシナリオに具体的に対処するわけではありませんが、 x86 、MIPS、および ARM の、著者がガジェット ヘッダー(つまり、プログラム ロジックのチャンク。ROP ガジェットと混同しないでください)と呼ぶものを通じて、プラットフォームに依存しないプログラム (PIP)の一般的な「自己識別プログラム」の概念について説明します。つまり、 0Eh、B2h、02h、A9h、0Eh、B2h、02h、3Ah、24h、77h、01h、04hまたは90h、EBh、20h、2Ah、90h、EBh、20h、3Ah、24h、77h、01h、04hです。)
- ^ abcdef Wilkinson, William "Bill" Albert; Seligman, Cory; Drushel, Richard F.; Harston, Jonathan Graham; Elliott, John C. (1999-02-17). 「MS-DOS & CP/M-compatible Binaries」.ニュースグループ: comp.os.cpm. 2021-12-13 にオリジナルからアーカイブ。 2021-12-13に取得。(注意: Elliott のサンプル コード内の一部のオペコード ( EBh、44h、EBh、EBh、04h、... ) は混同されている可能性があります。)
- ^ ab Elliott, John C. (2009-10-27). 「CP/M info program」.ニュースグループ: comp.os.cpm。 2021-12-13 にオリジナルからアーカイブ。 2021-12-13に取得。
[…] DOS 保護機能 […] このアイデアは、Simeon Cran の MYZ80 エミュレータのユーティリティに基づいています。これらの DOS 保護ヘッダーは、
Z80レジスタを変更しないことでさらに優れています。マジック シーケンスは EB 52 EB: […] XCHG […] MOV D,D […] XCHG […] ですが、これは DOS コードがプログラムの開始からかなり離れた場所になることを意味します。 […] 自己解凍型
PMArc
アーカイブ
を使用すると、さらに楽しむことができます。
[…] defb 0EBh、018h、'-pms-' […] で開始すると、PMA ユーティリティによって有効なアーカイブとして扱われ、
8086
プロセッサが 011Ah に、Z80 プロセッサが 0130h に送信されます。 […]
- ^ ChristW (2012-11-14) [2012-11-13]. Chen, Raymond (ed.). 「Microsoft Money がアカウント取引のインポート中またはダウンロードした取引の受取人を変更するときにクラッシュする」. The New Old Thing . 2018-07-05 にオリジナルからアーカイブ。2018-05-19に取得。
[…] バイト シーケンス […] EB 03 C3 yy xx […]これらの 5 バイトを先頭にして
.COM ファイルを作成すると […] 'JMP SHORT 3' が表示され、その後に 3 つのゴミ バイトが続きます。 […]
Z80 の
逆アセンブリを見ると
[…] これは 'EX DE,HL; INC BC;' に変換されます。 […] 3 番目のバイトは「JUMP」で、その後に yy xx として指定された 16 ビットのアドレスが続きます […]
MS-DOS
および […]
CP/M
で実行される .COM ファイルが作成されます[…]
(注: 著者は Z80 について説明していますが、このシーケンスは8080および互換プロセッサでも動作します。)
- ^ Brehm, Andrew J. (2016). 「CP/M と MS-DOS Fat Binary」。DesertPenguin.org 。2018年 5 月 19 日時点のオリジナルよりアーカイブ。2018年 5 月 19 日閲覧。(注: この記事ではZ80について説明していますが、コード シーケンスは8080および互換プロセッサでも動作します。)
- ^ Elliott, John C. (1996-06-13). 「micros.hensa.ac.uk にアップロード」。ニュースグループ: comp.os.cpm。2021-12-13 にオリジナルからアーカイブ。2021-12-13に取得。
[…] FATBIN 1.00 -
CP/M
.COM ファイル
と
DOS
.COM ファイルを結合して、両方のプラットフォームで実行できるファイルを作成します。[…] これは、次のファイルの作成に使用されました:[…] MSODBALL 2.05 - フロッピー ディスクを
Amstrad
706k 形式と DOS 706k 形式の間で変換します。[…] 両方のプログラムは、CP/M-80 と DOS で実行されます。[…]
- ^ Elliott, John C. (1998-06-28) [1997-04-01]. 「FATBIN v1.01」。1998-06-28時点のオリジナルよりアーカイブ。(注: FATBN101.COM 22k 1997-04-01 FATBIN v1.01。CP/M と DOS の両方で実行される fat バイナリ ファイルを作成します。CP /M-80 および DOS 用の自己解凍アーカイブで配布されます。)
- ^ Elliott, John C. (2002-03-11). 「DSKWRITE v1.00」。Fossies - the Fresh Open Source Software Archive。 2021-12-12 にオリジナルからアーカイブ。 2021-12-12に取得。
[…] DSKWRITE.Z80 には
CP/M
バージョンのソースが含まれています。 […] DSKWRITE.ASM には
DOS
バージョンのソースが含まれています。 […] 単一の
.COM ファイルを
取得するには、FBMAKE を使用する必要があります。 […]
[7] (注:FATBNSEA.COMパッケージのFBMAKEについて言及しています。)
- ^ ab Elliott, John C. (2012-06-20) [2005-01-05]. 「Generic CP/M」. Seasip.info . 2021-11-17 にオリジナルからアーカイブ。 2021-12-12に取得。
[…]
自己解凍アーカイブは、多数の小さなファイルを含む
.COM ファイル
です
。 1 つを実行すると、その小さなファイルが作成されます […] 自己解凍アーカイブ プログラムは、
DOS
(2 以降) または
CP/Mで実行され、同じ効果が得られます。
Unix
で解凍するには
、ZXCC を使用できます […] FATBNSEA.COM […] FATBIN は、CP/M-80 .COM ファイルと DOS .COM ファイルを結合して、両方のシステムで動作するファイルを生成します。 […] M3C4SEA.COM […] M3CONV バージョン 4 - .Z80 または .SNA 形式の
Spectrumスナップショットを
Multiface 3
形式
に変換します (Multiface 3 ->
Z80
は PC のみ)。 […] PMSFX21X.COM […]
PMSFX
は、これらの自己解凍アーカイブを生成するために使用されたプログラムです。このバージョン (2.11) では、CP/M または DOS で自己解凍するアーカイブを生成できます。PMSFX を使用するには
PMARC が必要です。新機能: DOS では、正確なファイル サイズをサポートします。 […] SP2BMSEA.COM […] Stop Press Canvas ファイルを
Windows
.BMPに変換します
[…]
[8]
- ^ Elliott, John C. (1997-01-18) [1997-01-11]. 「PMSFX 2」.
ニュース
グループ: comp.os.cpm. 2021-12-13 にオリジナルからアーカイブ。2021-12-13に取得。[…] 私は、
DOS
および
CP/M
で解凍できない
.COM ファイル
(最初の 3 バイトはいずれも有効な
Z80
コード、有効な
8086
コード、有効な
PMA
ヘッダー)を生成するPMSFX のバージョンを作成しました。 […]
自己解凍アーカイブ
として
。 […]
- ^ Elliott, John C.; Lopushinsky, Jim (2002) [1998-04-11]. 「CP/M 3 COM ファイル ヘッダー」. Seasip.info . 2016-08-30 にオリジナルからアーカイブ。2016-08-29に取得。
- ^ ab Necasek, Michal (2018-01-30) [2018-01-28, 2018-01-26]. 「WordStar Again」. OS/2 Museum . 2019-07-28 にオリジナルからアーカイブ。 2019-07-28に取得。
[…] このような違いが疑われる理由は、バージョン 3.2x が
CP/M-86
もサポートしていたためです(
オーバーレイは
DOS
と CP/M-86で同一で
、メインの実行ファイルのみが異なります) […]
.OVR
ファイルは DOS と CP/M-86 で 100% 同一で、実行時にフラグ (
WordStar 3.20 の
マニュアルに明確に示されています) で切り替えます […] WordStar の OS インターフェイスは非常に狭く、抽象化されています […] WordStar 3.2x のオーバーレイは、DOS バージョンと CP/M-86 バージョンで 100% 同一です。 INT 21h (DOS) と INT E0h (CP/M-86) の呼び出しを選択するランタイム スイッチがあります。WS.COM は DOS と CP/M-86 で同じではありませんが、それほど大きな違いはないと思われます。[…]
- ^ Lineback, Nathan. 「GSX スクリーンショット」。Toastytech.com 。 2020年1月15日時点のオリジナルよりアーカイブ。2020年1月15日閲覧。
- ^ abc Paul, Matthias R. (2002-04-11). 「Re: [fd-dev] ANNOUNCE: CuteMouse 2.0 alpha 1」. freedos-dev . 2020-02-21 にオリジナルからアーカイブ。2020-02-21に取得。
[…] FreeKEYB は […] 真の .COM および .SYS ドライバー (小型モデル) を 1 つにまとめたものです。最初の JMP は安全に上書きできます。これが私が「トリッキーなヘッダー」と表現した部分です。 […] FFFFh:FFFFh を 3 バイト ジャンプと保留中の DB FFh に置き換えることができます。MS-DOS、PC DOS、DR-DOS、およびおそらく他の DOS の問題でも動作します。 […]
- ^ abc Paul, Matthias R. (2002-04-06). "Re: [fd-dev] ANNOUNCE: CuteMouse 2.0 alpha 1". freedos-dev . 2020-02-07 にオリジナルからアーカイブ。2020-02-07に取得。
[…] ドライバーに SYS デバイス ドライバー ヘッダーを追加して、CTMOUSE が通常の
TSR
とデバイス ドライバーの両方を 1 つにまとめられるようにします (FreeKEYB アドバンス キーボード ドライバーと同様)。 […]
INSTALL = は DR DOS 3.41+ 以降でサポートされており、DR DOS は
[D]CONFIG.SYS
ディレクティブの順序を保持するため、
これは
DR DOSで実際には必要ありません […] しかし、これにより […]
MS-DOS
/
PC DOS
システムでの […] 柔軟性が向上します
。これらのシステムでは […] ファイル内の順序に関係なく、常に
DEVICE
= ディレクティブが INSTALL= ステートメントよりも先に実行されます。 […] ソフトウェアでは、マウス ドライバーがデバイス ドライバーとして存在していることが必要になる場合があります。これは、昔からマウス ドライバーは常にデバイス ドライバーだったためです。これらのマウス ドライバーには、使用するプロトコルに応じて特定のデバイス ドライバー名が付けられており (たとえば、
マウス システム モードの場合は "
PC$MOUSE
"
)、一部のソフトウェアでは、使用するマウスの正しいタイプを見つけるためにこれらのドライバーを検索する場合があります。 […] もう 1 つの利点は、デバイス ドライバーは通常、メモリの消費量が少ないことです (
環境
や
PSP
が不要) […] これは基本的に、扱いにくいファイル ヘッダー、コマンド ラインを解析するための別のコード、別のエントリ ポイントと終了行、および ORG 0 / ORG 100h の違いを克服するためのセグメント マジックです。デバイス ドライバーの
自己ロードハイイングは
、ドライバー ヘッダーをそのままにして、ドライバーの残りの部分のみを再配置する必要があるため、少し扱いにくくなります […]
- ^ abcd Paul, Matthias R. (2001-06-10) [1995]. 「DOS COUNTRY.SYS ファイル形式」(COUNTRY.LST ファイル) (1.44 版). 2016-04-20 にオリジナルからアーカイブ。2016-08-20に取得。
- ^ abc ポール、マティアス R. (1997-07-30) [1994-05-01]. 「第 II.4 章。外部コマンドの管理 - SYS.COM」。 NWDOS-TIP — Novell DOS 7 に関するヒントとコツ、詳細、バグ、回避策を含む Blick です。 MPDOSTIP (ドイツ語) (第 3 版)。 2017-09-10 のオリジナルからアーカイブ。2014 年 8 月 6 日に取得。
カルデラの OpenDOS 7.01 をアップデートして、
IBMBIO.COM
のスタートコードを修正してください - 正常なプログラムを開始してください - 完全なコマンドを実行してください。バージョン Einzug halten wird の機能をすべて使用すると、次の操作が可能になります。
(注: NWDOSTIP.TXT は Novell DOS 7 と OpenDOS 7.01 に関する包括的な資料で、多くの文書化されていない機能や内部構造の説明が含まれています。これは、
MPDOSTIP.ZIP2001 年まで維持され、当時多くのサイトで配布されていた著者のさらに大規模なコレクションの一部です。提供されているリンクは、HTML に変換された古いバージョンのファイルを指し示していますNWDOSTIP.TXT。) [9] - ^ Paul, Matthias R. (1997-10-02). 「Caldera OpenDOS 7.01/7.02 Update Alpha 3 IBMBIO.COM README.TXT」。2003-10-04 時点のオリジナルよりアーカイブ。2009-03-29閲覧。[10]
- ^ DR-DOS 7.03 WHATSNEW.TXT - DR-DOS 7.02 から DR-DOS 7.03 への変更。カルデラ社、 1998-12-24。 2019年4月8日のオリジナルからアーカイブ。2019年4月8日に取得。
- ^ ab Sage, Jay (1988年5月~6月). Carlson, Art (編). 「ZCPR 3.4 - タイプ4プログラム」. The Computer Journal (TCJ) - プログラミング、ユーザーサポート、アプリケーション. ZCPR3コーナー (32). コロンビアフォールズ、モンタナ州、米国: 10~17 [16]. ISSN 0748-9331. ark:/13960/t1wd4v943 . 2021年11月29日閲覧。[11][12]
- ^ ab Sage, Jay (1992年5月~6月) [1992年3月~6月]. Carlson, Art; McEwen, Chris (編). 「Type-3 and Type-4 Programs」. The Computer Journal (TCJ) - プログラミング、ユーザーサポート、アプリケーション. Z-System Corner - Some New Applications of Type-4 Programs (55). S. Plainfield, New Jersey, USA: Socrates Press: 13–19 [14, 16]. ISSN 0748-9331. ark:/13960/t4dn54d22 . 2021-11-29閲覧。[13][14]
- ^ ab Sage, Jay (1992 年 11 月 - 12 月). Carlson, Art; Kibler, Bill D. (編). 「Regular Feature, ZCPR Support, Language Independence, part 2」. The Computer Journal (TCJ) - Programming, User Support, Applications . The Z-System Corner (58). Lincoln, CA, USA: 7–10. ISSN 0748-9331. ark:/13960/t70v9g87h . 2020-02-09に取得。 […] 「RST 0」というオペコードがあり、これを実行すると
ウォームブート
が発生します
。Z3TXT モジュールを含むファイルは実行されるべきではありませんが、1 バイトのコストで、その可能性から身を守ることができます。ヘッダーには、文字列「
Z3TXT
」とそれに続くヌル (0) バイトも含まれていました。多くの
Z-System
モジュールには、このような識別子が含まれています。このカテゴリには、常駐コマンド パッケージ (RCP)、フロー コマンド パッケージ (FCP)、および環境記述子モジュール (
Z3ENV
) があります。Bridger Mitchell の […] JETLDR.COM などのプログラムでは、これらのモジュールをファイルからメモリにロードして、ID 文字列を使用してファイルを検証できます。つまり、ユーザーが指定した種類のモジュールであるかどうかを確認できます。これにより、ユーザーのミスや破損したファイルを検出できます。 […] したがって、ヘッダーは次のようになります。 […] rst […] db 'Z3TXT',0 ; ヌルで終了する ID […] ; 12345678 ; 8 文字である必要があります、[…] db 'PROGNAME' ; スペースで埋めます […] ; 123 ; 3 文字である必要があります […] db 'ENG' ; 言語名 […] dw LENGTH ; モジュールの長さ […]
[15][16]
- ^ 「IO デバイス特性表 - コンソールまたはテレタイプライター」。PDP-6 マルチプログラミング システム マニュアル(PDF)。米国マサチューセッツ州メイナード: Digital Equipment Corporation (DEC)。1965 年。p. 43。DEC-6-0-EX-SYS-UM-IP-PRE00。2014年 7 月 14 日にオリジナルからアーカイブ(PDF) 。2014 年 7 月 10 日に取得。(1+84+10ページ)
- ^ 「5.1.1.1. デバイス依存機能 - データモード - 全二重ソフトウェア A(ASCII) および AL(ASCII ライン)」。PDP-10 リファレンス ハンドブック: モニターとの通信 - タイムシェアリング モニター(PDF)。第 3 巻。Digital Equipment Corporation (DEC)。1969 年。pp. 5-3–5-6 [5-5 (431)]。 2011 年 11 月 15 日にオリジナルからアーカイブ(PDF)されました。2014年 7 月 10 日に取得。(207ページ)
- ^ 「2. オペレーティング システム コール規則」。CP/M 2.0 インターフェイス ガイド(PDF) (第 1 版)。米国カリフォルニア州パシフィック グローブ: Digital Research。1979年。5 ページ。2020 年 2 月 28 日にオリジナルからアーカイブ(PDF) 。2020年 2 月 28 日に取得。 [ …]
ASCII
ファイルの終わりは、
CP/M読み取り操作によって返される
制御 Z
文字 (1AH) または実際のファイル終了
によって示されます。ただし、マシン コード ファイル (
COM ファイル
など) に埋め込まれた制御 Z 文字は
無視され、CP/M によって返されるファイル終了条件は読み取り操作を終了するために使用されます。[…]
(56ページ)
- ^ Hogan, Thom (1982)。「3. CP/M トランジェント コマンド」。Osborne CP/M ユーザー ガイド - すべての CP/M ユーザー向け (第 2 版)。米国カリフォルニア州バークレー: A. Osborne/McGraw-Hill。p . 74。ISBN 0-931988-82-9. 2020-02-28に取得。
[…] CP/M は、ファイル内の最後のデータ文字の後にCONTROL-Z文字を配置することで、 ASCIIファイルの終わりをマークします。ファイルに 128 の倍数の文字が含まれている場合、CONTROL-Z を追加すると 127 文字が無駄になるため、CP/M はそうしません。CONTROL-Z 文字をファイル終了マーカーとして使用することは可能です。これは、CONTROL-Z が ASCII ファイルのデータとして使用されることはほとんどないためです。ただし、非 ASCII ファイルでは、CONTROL-Z は他の文字と同じくらい発生する可能性があります。したがって、ファイル終了マーカーとして使用することはできません。CP/M は、非 ASCII ファイルの終わりをマークするために別の方法を使用します。CP/M は、ファイルに割り当てられた最後のレコード (ディスク領域の基本単位) を読み取ったときに、ファイルの終わりに到達したと見なします。各ファイルのディスク ディレクトリ エントリには、そのファイルに割り当てられたディスク レコードのリストが含まれています。この方法では、ファイルの内容ではなくサイズに基づいてファイルの末尾を特定します。[…]
[17][18] - ^ BC_Programmer (2010-01-31) [2010-01-30]. 「Re: 複数のファイルをマージするコピーコマンドは、末尾にSUBという単語をタグ付けします」。Computer Hope Forum。2020年2月26日時点のオリジナルよりアーカイブ。 2020年2月26日閲覧。
- ^ 「Linux と Windows の .txt ファイルの違いは何ですか (Unicode エンコーディング)」。Superuser。2011-08-03 [2011-06-08]。2020-02-26 にオリジナルからアーカイブ。2020-02-26に取得。
- ^ ab Gordon, Ryan C. (2009年10月). 「FatELF: Linux用ユニバーサルバイナリ」. icculus.org . 2020年8月27日時点のオリジナルよりアーカイブ。2010年7月13日閲覧。
- ^ Gordon, Ryan C. (2009 年 11 月). 「FatELF 仕様、バージョン 1」. icculus.org . 2020 年 8 月 27 日時点のオリジナルよりアーカイブ。2010年 7 月 25 日閲覧。
- ^ Windisch, Eric (2009-11-03). 「件名: ニュースグループ: gmane.linux.kernel、Re: FatELF パッチ...」 gmane.org。2016-11-15 にオリジナルからアーカイブ。2010-07-08に取得。
- ^ Gordon, Ryan C. (2009). 「FatELF: Linux 用ユニバーサルバイナリ - 概念実証仮想マシンのダウンロードページ」. icculus.org . 2022-05-21 時点のオリジナルよりアーカイブ。2022-05-26取得。(注: Fat Binary をサポートする Ubuntu 9.04 の VM イメージです。)
- ^ Holwerda, Thom (2009-11-05). 「Ryan Gordon Halts FatELF Project」. Linux. osnews.com. 2022-05-26時点のオリジナルよりアーカイブ。2010-07-05に閲覧。
- ^ Brockmeier, Joe "Zonker" (2010-06-23). 「SELF: (疑惑の) 失敗の分析」LWN.net . Linux Weekly News. 2022-05-26 時点のオリジナルよりアーカイブ。2011-02-06に取得。
- ^ Mulder, Sijmen J. (2021-03-06) [2018-04-25]. 「sjmulder/fatpack - Windows 用のマルチアーキテクチャ「fat」バイナリの構築」. GitHub . 2022-05-26 にオリジナルからアーカイブ。2022-05-26に取得。
- ^ 「Arm64X PE ファイル」。learn.microsoft.com。Microsoft。2022年 8 月 13 日。2023 年 8 月 20 日時点のオリジナルよりアーカイブ。2023年 3 月31日閲覧。
- ^ 「Arm64X バイナリのビルド」。learn.microsoft.com。Microsoft。2023年 3 月 10 日。2023年 8 月 20 日時点のオリジナルよりアーカイブ。2023年 3 月 31日閲覧。
- ^ Wang, Perry H.; Collins, Jamison D.; Chinya, Gautham N.; Jiang, Hong; Tian, Xinmin; Girkar, Milind; Yang, Nick Y.; Lueh, Guei-Yuan; Wang, Hong (2007 年 6 月)。「EXOCHI: 異種マルチコア マルチスレッド システム向けのアーキテクチャとプログラミング環境」。ACM SIGPLAN Notices。42 ( 6): 156–166。doi : 10.1145 /1273442.1250753。(11ページ)
- ^ Wang, Perry H.; Collins, Jamison D.; Chinya, Gautham N.; Jiang, Hong; Tian, Xinmin; Girkar, Milind; Pearce, Lisa; Lueh, Guei-Yuan; Yakoushkin, Sergey; Wang, Hong (2007-08-22). 「アクセラレータ外骨格」(PDF) . Intel Technology Journal . 11: テラスケールコンピューティング (3). Intel Corporation : 185–196. doi :10.1535/itj.1103. ISSN 1535-864X. 2022-05-26 にオリジナルからアーカイブ(PDF)されました。2022-05-26に取得。(1+vii+90+1 ページ中 12 ページ)
- ^ "cudaFatFormat.h / ptxomp.c". 1.13. Nvidia Corporation . 2004-11-15. 2022-05-26時点のオリジナルよりアーカイブ。 2022-05-26に取得。
- ^ Harris, Mark J. (2014-05-08) [2013-06-05]. 「テクニカルウォークスルー: CUDA プロヒント: Fat Binaries と JIT キャッシュを理解する」. Nvidia Developer . Nvidia . 2022-03-23 にオリジナルからアーカイブ。2022-05-26に取得。
- ^ 「CUDA バイナリユーティリティ」(PDF) (アプリケーションノート)。6.0。Nvidia。2014年2月。DA-06762-001_v6.0。2022年 5 月 25 日のオリジナルからアーカイブ(PDF) 。2022 年5 月 25 日に取得。
- ^ "fatbinary - help". helpmanual.io . 8.0. 2016. 2022-05-25時点のオリジナルよりアーカイブ。 2022-05-25に取得。
- ^ 「CUDA コンパイラ ドライバー NVCC - リファレンス ガイド」(PDF) . 11.7. Nvidia . 2022 年 5 月. TRM-06721-001_v11.7. 2022 年 5 月 25 日のオリジナルからアーカイブ(PDF)されました。 2022 年 5 月 25 日に取得。
- ^ Braun, Lorenz; Fröning, Holger (2019-11-18). CUDA Flux: CUDA アプリケーション用の軽量命令プロファイラー(PDF) . IEEE/ACM 高性能コンピュータシステムのパフォーマンスモデリング、ベンチマーク、シミュレーション (PMBS) . デンバー、コロラド州、米国: IEEE . doi :10.1109/PMBS49563.2019.00014. ISBN 978-1-7281-5977-5. 2022年3月21日時点のオリジナルよりアーカイブ(PDF). 2022年5月26日閲覧。
- ^ Fung, Wilson WL; Sham, Ivan; Yuan, George; Aamodt, Tor M. (2007). 「効率的な GPU 制御フローのための動的ワープ形成とスケジューリング」(PDF) 。バンクーバー、ブリティッシュコロンビア州、カナダ。2022年 5 月 26 日のオリジナルからアーカイブ(PDF) 。2022年 5 月 26 日取得。(12ページ)
- ^ Bakhoda, Ali; Yuan, George L.; Fung, Wilson WL; Wong, Henry; Aamodt, Tor M. (2009-04-28) [2009-04-26]. 詳細な GPU シミュレータを使用した CUDA ワークロードの分析(PDF) . Proceedings of the IEEE International Symposium on Performance Analysis of Systems and Software (ISPASS). Boston, Massachusetts, USA. pp. 163–174. doi :10.1109/ISPASS.2009.4919648. 2022-05-26 にオリジナルからアーカイブ(PDF)されました。2022-05-06に取得。[19]
- ^ ab "13.4 AMD コンパイラ ラッパー: ファット バイナリ". Multi2Sim シミュレーション フレームワーク - 異機種コンピューティング向け CPU-GPU モデル(PDF) . v4.2. Multi2Sim. 2013. pp. 173–176 [176]. 2022-05-25 にオリジナルからアーカイブ(PDF)されました。2022-05-25に取得。(210 ページ中 4 ページ)
- ^ Ubal, Rafael; Jang, Byunghyun; Mistry, Perhaad; Schaa, Dana; Kaeli, David R. (2012-09-23) [2012-09-19]. 「Multi2Sim: CPU-GPU コンピューティングのシミュレーション フレームワーク」(PDF) . 21st International Conference on Parallel Architectures and Compilation Techniques (PACT) . ミネアポリス、ミネソタ州、米国: IEEE . ISBN 978-1-4503-1182-3. 2022年5月25日時点のオリジナルよりアーカイブ(PDF) . 2022年5月25日閲覧。(10ページ)
- ^ 「LTO の概要 (GNU コンパイラ コレクション (GCC) の内部)」。gcc.gnu.org。2021 年 9 月 12 日時点のオリジナルよりアーカイブ。2021 年 9 月 12 日閲覧。
- ^ Wennborg, Hans (2018). 「Clang の属性」。Clang 7 ドキュメント。2022 年 4 月 7 日時点のオリジナルよりアーカイブ。2022年 5 月 26 日閲覧。
- ^ Bahena, Victor Rodriguez (2018-04-03). 「Intel アーキテクチャ向けに最適化されたライブラリ パッケージの透過的な使用」。電力とパフォーマンス。Clear Linux プロジェクト。Intel Corporation。2022-05-26のオリジナルからアーカイブ。2022-05-26に取得。
- ^ Paul, Matthias R.; Frinke, Axel C. (1997-10-13) [1991], FreeKEYB - 拡張 DOS キーボードおよびコンソール ドライバー(ユーザー マニュアル) (v6.5 版)[20] (注:FreeKEYBは、ほとんどのキーボードレイアウト、コードページ、および国コードをサポートする、 Unicodeベースの動的構成可能なK3PLUSの後継です。既製のマクロアセンブラと、自動前処理および後処理分析ツールのフレームワークを使用して、バイナリコードと一緒に実行可能ファイルに埋め込まれる依存関係とコードモーフィングメタデータと、自己破棄、緩和、および再配置ローダーを作成し、ロード時にバイトレベルの粒度の動的なデッドコード除去と再配置技術を実装し、実行時に自己修正コードと再構成可能性を実装して、基盤となるハードウェア、オペレーティングシステム、ドライバ構成、および選択された機能セットとロケール(数百のオプションを持つ約60の構成スイッチで、ほぼ無制限の組み合わせが可能です)に応じて、メモリフットプリントを標準形式に近づけます。この複雑さとダイナミクスは、従来のドライバと同じように単一の実行可能ファイルを扱うユーザーには見えません。)
- ^ Paul, Matthias R. (2002-04-06). "[fd-dev] Ctrl+Alt+Del". freedos-dev . 2019-04-27 にオリジナルからアーカイブ。 2019-04-27に取得。
[…] FreeKEYB は、ロードされるマシンの種類、キーボードの種類、レイアウト、国、コード ページ、インストールされているマウスとビデオ アダプターの種類、そのシステムにロードされているその他のドライバー、オペレーティング システムと使用されているロードおよび再配置方法、含まれる個々の機能、およびコマンド ラインで指定された構成オプションに応じて、初期化時にドライバーのランタイム イメージを構築します。サポートされているコマンド ライン スイッチとオプションの数が多いため […] (約 50 個のスイッチ […] 複数の設定が可能)、無数の依存関係を持つ機能の組み合わせが多数あり […] 結果的に […] さまざまなターゲット イメージが無限に存在します。 FreeKEYB の動的デッド コード除去技術は、これらの依存関係を解決し、デッド コードとデータを削除します。これは、従来の TSR プログラミングのように、ある程度限られた数のモジュールまたはサブルーチン全体を含めたり除外したり、一部のディスパッチ テーブルを修正したりするだけでなく、バイト レベルで機能します。また、大規模なルーチンの途中にある個々の命令を削除したり、特定のケースを処理したり、特定の機能をサポートしたりするためにコード全体に分散したりすることもできます。特別なツールを使用してコードを分析し、フィックスアップ テーブルを自動的に作成します。条件定義を使用してさまざまなケースを宣言します。アセンブリ時だけでなく初期化時にもオプションです。ランタイム イメージにデッド コードを少なくともある程度残しておくオーバーヘッドはありません。これらの条件間のすべての依存関係を追跡し、ランタイム イメージを動的に構築して再配置し、これらの小さな変更および移動バイナリ パーツ間のすべての参照を修正します。小さな .COM/.SYS スタイルのモデルを使用できます。初期化時に実行されます。
- ^ Paul, Matthias R. (2001-08-21). 「[fd-dev] FreeDOS のコードページの変更」。freedos-dev。 2019-04-19 にオリジナルからアーカイブ。2019-04-20に取得。
[…] […] ユニークな機能 […] を
動的デッドコード除去と
呼んでおり、インストール時に […] 必要なドライバーのコンポーネントと不要なコンポーネントを指定できます。これは、これまで DOS では見たことのない、動的ロード可能なモジュール化と遅延リンクの範囲にまで及びます。スクリーンセーバー、マクロ、電卓、マウスのサポート、または <その他ほとんどすべて> が気に入らない場合は、コマンドラインでこれを指定できます。FreeKEYB は、ルーチン間のすべての依存関係を考慮しながら、その機能に関係し、要求された機能を提供するのに必要のないすべてのコードフラグメントを完全に削除してから、ドライバーがイメージをターゲットの場所に再配置して常駐します。 […]
- ^ ポール、マティアス R. (2001-04-10)。 「[ANN] FreeDOS ベータ 6 がリリースされました」(ドイツ語)。ニュースグループ: de.comp.os.msdos。 2017-09-09 のオリジナルからアーカイブ。2017 年 7 月 2 日に取得。
[…] brandneue[s] 機能、
デッドコード排除機能
、宝石ではなく、ベストアンサーメンバステルトと再配置のインストール、つまり、コードの日付を変更する (zB wenn jemand ein) Bestimmtes FreeKEYB-Feature nicht benötigt)。 […]
さらに読む
- Tunney, Justine Alexandra Roberts (2021-02-11). 「ファットバイナリはどの程度ファットにする必要があるのか?」。cosmopolitan libc - 一度ビルドすればどこでも実行できる C ライブラリ / Cosmopolitan Communiqué。 2021-09-12 にオリジナルからアーカイブ。 2021-09-12に取得。; Tunney, Justine Alexandra Roberts (2021-02-11). 「ファットバイナリはどの程度ファットにする必要があるのか?」Hacker News . 2021-06-01 にオリジナルからアーカイブ。2021-09-12に取得。
- Tunney, Justine Alexandra Roberts (2020-08-24). 「αcτµαlly pδrταblε εxεcµταblε (Ape)」。2021-09-12にオリジナルよりアーカイブ。2021-09-12に閲覧。
- Gotham, Frederick (2020-10-22). 「Linux および Mac 用の Fat Binary の作成」. Narkive . 2021-09-12 にオリジナルからアーカイブ。2021-09-12に取得。
- Gotham, Frederick (2020-10-24). 「Fat Binary - MS-Windows と 4 つの Linux」. Narkive . 2021-09-12 にオリジナルからアーカイブ。2021-09-12に取得。
- Gotham, Frederick (2020-11-02). 「Fat Binary - DOS Windows Linux」. Narkive . 2021-09-12 にオリジナルからアーカイブ。2021-09-12に取得。
- 「Amiga - StormC を PowerPC および p-OS 向けに WarpUP するために開発しました」。Haage & Partner GmbH。1996年 9 月。2017 年 12 月 6 日時点のオリジナルよりアーカイブ。2021年 9 月 29 日閲覧。
- Münch, Matthias (2006) [2005]. 「AmigaOS 3.9 - 機能」. AmigaOS: マルチメディア、マルチスレッド、マルチタスク。2021-09-29にオリジナルからアーカイブ。2021-09-29に取得。
