バイナリファイル(OBJファイル、a.out、ELFなど)のエンコード形式は何ですか?

バイナリファイル(OBJファイル、a.out、ELFなど)のエンコード形式は何ですか?

vimでバイナリファイルを開くと0s、代わりにニーモニックが表示されます1s。私はこれがvimがデフォルトでASCIIモードでファイルを開くからだと思います。私の理解は正しいですか?バイナリファイルのエンコード形式は何ですか? UTF-8ですか?xxdバイナリファイルが16進数でダンプされることを知っていますVim。しかし、なぜvimやテキストエディタがバイナリファイルを0s1s

答え1

すべての最新のオペレーティングシステムでは、すべてのバイナリファイルは一連のバイトまたは8ビットグループとして保存および処理されます。実際、すべてのテキストファイルはこのように保存されます。

ほとんどの場合、テキストエディタ(またはバイナリファイルエディタ)はストレージ単位であるため、バイトを表示するように設計されています。異なる値を含むようにバイナリファイルを編集する場合は、一度に複数のビットを編集するよりも、一度に1バイトを編集する方が便利です。たとえば、データファイルを編集して値を1234から5678に変更した場合、バイトを並べ替えるストリームでいくつかのビットシーケンスを見つけるよりもバイトを検索して04 d2からORd2 04に置き換える方がはるかに簡単です。16 2e2e 16

Vimは、他の多くのテキストエディタと同様に、シングルバイトエンコーディング(通常はVim)を使用するモードでバイナリファイルを開きますlatin1。文字エンコーディングは、バイナリデータではなくテキストデータ(つまり、人間が理解できることを示すデータ)に使用されるため、どのエンコーディングを使用するかはあまり興味深いものではありません。シングルバイトエンコーディングを使用する目的は、すべてのバイトシーケンスが有効であり、ロードまたは保存時に変更されないことです。

最後に、バイナリファイルもテキストファイルほど明確ではないとしても、一般的にいくつかの構造を持っています。たとえば、ELFファイルは0x7fバイト​​で始まり、その後に文字が続きますELF。次に、クラス(32ビットまたは64ビット)、バイト順序、バージョン、およびABIのバイトを含めます。テキストファイルとは異なり、フォーマットに慣れていないと読みやすい形式です。

関連情報