Hexter

ヘックスエディタとは何か(そして本当に必要になるとき)

誰かに「ヘックスエディタで確認して」と言われたか、ヘックスビューアを検索して、それが何なのか完全には分からないままここにたどり着いたのでしょう。大丈夫です。ヘックスエディタとは、ファイルをドキュメント、画像、スプレッドシートとして解釈しようとするのではなく、その生の内容をバイト単位で見せてくれるプログラムです。ディスクに実際に格納されているものを、最も近いところで見る方法です。

なぜ特にヘックスなのか

ファイルは、どんなファイルであれ、単なるバイトの並びで、各バイトは 0 から 255 までの数値です。それらの数値を 10 進数で表示することもできますが、0 から 255 は最大 3 桁になり、きれいに揃いません。2 進数で表示することもできますが、1 バイトは 1 と 0 の 8 桁で、目で追うのが大変です。16 進数(基数 16、0-9 の数字と A-F の文字を使う)が折衷案です。すべてのバイトがちょうど 2 文字、00 から FF に収まるので、バイトの行がきれいで目で追いやすいグリッドに揃います。「ヘックス」が標準であって 10 進数や 2 進数でない理由は、それがすべてです。技術的な要件ではなく、読みやすさの選択です。

実際に見ているもの

任意のファイルをヘックスエディタで開くと、同じデータについて 3 つのものが並んで見えます。

ヘックスエディタの 3 つの列の図:ファイル内の位置を示すオフセット列、各バイトを 2 文字のヘックスで示すヘックスグリッド、そして同じバイトを ASCII として解釈して示すテキスト列。
同じバイトを 3 通りに表示:それらがどこにあるか、何であるか、テキストとして見るとどう見えるか。
  • オフセット:ファイル内でどれだけ進んだか。通常はそれ自体もヘックスで表示され、後で特定の位置に戻れるようになっています。
  • ヘックスバイト:実際のデータ。1 バイトあたり 2 文字で、行にまとめられます(一般的には 1 行 16 バイト)。
  • テキスト(ASCII)表示:同じバイトを文字として再解釈したもので、ファイルの中でたまたま読めるテキストである部分向け。テキストでないバイトは、通常ドットのプレースホルダとして表示されます。

その 3 つ目の列こそ、ほとんどがバイナリデータのファイルでも、ファイルパス、ラベル、バージョン文字列がしばしば見える理由です。埋め込まれたテキストはどれもその列に現れます。ファイル全体がテキストファイルでなくてもです。

実際に必要になるとき

ほとんどの人は一生ヘックスエディタを開くことなく過ごし、それはまったく普通のことです。それが本当に正しいツールになる状況は限定的です。

  • ファイルの拡張子が実際の内容と一致しない。 誰かが .zip.doc に名前変更したとか、.db ファイルが本当にデータベースなのか確信がないとか。ほとんどのフォーマットの最初の数バイトは特徴的な署名(PNG は 89 50 4E 47、ZIP は 50 4B で始まる)で、ヘックス表示なら数秒でそれを確認できます。
  • ファイルが壊れていて、どう壊れたのか知りたい。 切り詰められたダウンロード、不良な転送、上書きされたヘッダー。生のバイトを見れば、損傷が先頭にあるのか、末尾にあるのか、散らばっているのかが分かります。
  • バイナリデータを読み書きする何かをデバッグしている、セーブファイルフォーマット、設定ファイル、ネットワークプロトコルで、どのバイトが生成されているかを正確に確認する必要がある。
  • 特定の値を検証したい、4 バイトが本当に期待するファイルサイズを表しているか確認したり、タイムスタンプを調べたり。ブラックボックスのツールがそれを正しく解釈してくれると信じずに。
  • 好奇心。 見慣れたファイルフォーマットが内部で実際にどう見えるのかを見るためだけに、一度ヘックスエディタを開く人はたくさんいます。それはまったく正当な理由です。

これらのどれも今していることに当てはまらないなら、おそらく必要ありません。それで大丈夫です。特定の種類の問いのための専門的なツールです。

ヘックスエディタを、単に機能的なだけでなく良いものにするもの

いざ必要になると、ツールはたいてい同じ基本的な仕事をします。バイトを見せ、スクロールさせ、検索させる。重要になる違いは、生の機能数ではなく、安全性と明快さについてです。Hex Fiend は、ほとんどの Mac ユーザーがデフォルトで行き着く無料のオープンソースの選択肢で、特に非常に大きなファイルで本当に有能です。Hexter は、より狭く、より慎重なアプローチを採ります。すべてのファイルが読み取り専用で開くので、見慣れないものを見てもリスクはゼロ、編集はデフォルトの状態ではなく明示的で元に戻せるステップ、そして一般的なファイルフォーマット(PNG、ZIP、Mach-O、WAV、SQLite)は、ヘッダーを手作業でデコードさせる代わりに、その構造が自動的に解析されます。

どちらが欲しいかは、何をしているかによります。数ギガバイトの 2 つのファイルをバイト単位で比較しているなら、Hex Fiend の差分機能はその規模のために作られています。ファイルが実際に何なのか確認したい、少数のバイトを調べたい、あるいはオリジナルをうっかり壊す心配なく小さく慎重な編集をしたいだけなら、それが Hexter が目指して作られた状況です。