16進ダンプ

16進ダンプ（じゅうろくしんダンプ）またはヘックスダンプ（）とは、RAMやファイル上のコンピュータデータの一部または全部を、16進数で画面または紙に表示させたものである。データの16進ダンプは、デバッグやリバースエンジニアリングの一部としてよく行われる。
16進ダンプでは、各バイト（8ビット）は2桁の16進数として表される。16進ダンプは、一般に1行が8バイトまたは16バイトで表され、1バイト（2桁）ごとに空白で区切って表示されることが多い。各行の先頭に16進数によるメモリアドレス、各行の末尾にチェックサムが表示される場合もある。
その名前は16進数(hexadecimal number)での出力を意味するが、16進数ダンプソフトウェアの中には8進数や10進数の出力用のオプションを持つものがある。Unixで16進ダンプを行うソフトウェアにodがあるが、これは"octal dump"（8進ダンプ）の略である。他の16進ダンプを行うソフトウェアとして、hexdump, xxdなどがある。
例.
UNIXプログラムhexdumpによって作成された、プログラムの一部の16進ダンプの例を以下に示す。
この例では、バイトオーダーが不確実な場合があるため、あいまいな形式の16進ダンプとなっている。そのような16進ダンプは、使用状況上バイトオーダーが決まっている場合や、次のように、指し示す値が完全な形式で意図的に与えられている場合にのみ有効である。
明示的なバイトシーケンスが必要な場合（例えば、機械語プログラムの16進ダンプやROMの内容）、バイト単位の表現が好まれ、通常は8バイトグループ間のオプションの区切り文字で16バイト行に編成される。
値の間に空白を入れない圧縮された形式も稀に使用される。
Unixのデフォルト表示は、通常次のようになる。これは、最近のx86（リトルエンディアン）コンピュータでの2バイトワードと同じバイトである。
多くの場合、行の末尾に対応するASCIIテキスト変換が表示される（例： または ）。
0000: 57 69 6B 69 70 65 64 69 61 2C 20 74 68 65 20 66 Wikipedia, the f
0010: 72 65 65 20 65 6E 63 79 63 6C 6F 70 65 64 69 61 ree encyclopedia
0020: 20 74 68 61 74 20 61 6E 79 6F 6E 65 20 63 61 6E that anyone can
0030: 20 65 64 69 74 00 00 00 00 00 00 00 00 00 00 00 edit...
チェックサム.
ホビーパソコン時代の紙の雑誌の記事に機械語プログラムが掲載された場合のような、16進ダンプをコンピュータに手入力することを意図している場合、チェックサムバイトが各行の末尾に追加される。チェックサムには、行内の全ての値の合計を256で割った余りという単純なものや、より高度なCRCが使われる。このチェックサムは、ユーザーが行を正しく入力したかどうかを判断するのに使用される。
16進ダンプのファイルフォーマットにはS-record、Intel HEX、など各種あるが、いずれも各行の末尾に同様のチェックサム値がついている。
重複行の圧縮.
Unixプログラムのodとhexdumpでは、同じデータを含む行が連続する場合は、連続行の最初の1行以外を省略して、アスタリスクを1つだけ含む行が表示される。例えば、全てゼロのブロックは次のように出力される。
この圧縮機能は、大きなファイルや完全なデバイスの不規則性を検査するのに便利である。最近のLinuxシステムでは、以下のコマンドで、ハードドライブ全体をスキャンして、全て空白になっているかどうかを確認のに使える。
-vオプションを指定すると、 hexdumpとodは全てデータを明示的に表示する。
odとhexdump.
Unix/POSIX/GNUシステムの場合、odやhexdumpが、ファイルまたはストリームから8進数・16進数・またはその他の方法で、エンコードされたバイトを出力する。システムの種類に応じて、これら2つのユーティリティのどちらかまたは両方が使用可能である。以前は、BSDシステムはodを廃止してhexdumpを採用しており、GNUシステムはその逆だった。しかし、これらのユーティリティの目的は全く同じであり、オプションがわずかに異なるだけだった。2002年のPOSIX以降、FreeBSDとGNUの両方がその決定を覆し、odとhexdumpの両方に完全に対応している。
DUMP, DDT, DEBUG.
初期のパーソナルコンピュータで使用されていた8ビットオペレーティングシステムCP/Mでは、標準のDUMPプログラムは、行頭に16進数オフセット、末尾に各バイトに相当するASCII文字を表示し、1行16バイトで表示した。印刷可能なASCII文字の範囲（20 - 7E）外のバイトは、視覚的な位置合わせのためピリオド"."として表示された。これと同じフォーマットは、CP/Mの標準デバッガDDTでDコマンドを呼び出してメモリを表示する際にも使用されていた。DOSデバッガDEBUGなどでは、DUMPのフォーマットを継承したが、全体の幅を変えずに8バイト目と9バイト目の間のスペースをダッシュに変更した。
この表記法は、DR-DOS、MS-DOS、OS/2、MS-Windowsなどの、CP/Mから直接または間接的に派生したオペレーティングシステムで保持されている。Linuxシステムでは、hexcatコマンドがこの古典的な出力フォーマットを生成することができる。このフォーマットを採用する主な理由は、標準の80文字幅の画面やプリンターに最大量のデータを収めることができる一方で、視覚的に読みやすく流し読みしやすいことである。
1234:0000: 57 69 6B 69 70 65 64 69 61 2C 20 74 68 65 20 66 Wikipedia, the f
1234:0010: 72 65 65 20 65 6E 63 79 63 6C 6F 70 65 64 69 61 ree encyclopedia
1234:0020: 20 74 68 61 74 20 61 6E 79 6F 6E 65 20 63 61 6E that anyone can
1234:0030: 20 65 64 69 74 00 00 00 00 00 00 00 00 00 00 00 edit...