hexdump 的なもの
なんとなく、知っているものをだらだらと。しかし、どいつもこいつも endian を指定できないのが悲しい。
hexdump
まぁ、正直にいうと使いにくい。1バイト単位で16進出力なんてのがやりたければフォーマット文字列を指定しないとできないのだが、このフォーマット指定文字列が難しい。
例えば、16バイトごとにアドレスを出力しながら、1バイト単位で16進出力、なんかだとこうなる。
% hexdump -e '"%07_ax" 16/1 " %02x" "\n"'
「"%07_ax"」 でアドレスを7桁16進で出力、「16/1 " %02x"」というのは1バイトずつ読み込んで、" %02x" で出力を16回繰り返し、「"\n"」は改行の出力。まぁ、分かりにくい。Ruby で書くとこんな感じ。
addr = 0 until ARGF.eof? printf '%07x', addr 16.times do data = ARGF.read(1) break unless data printf " %02x", data.unpack('c').first addr += 1 end printf "\n" end
ややこしい代わりに、出力の制御は高機能。あと endian は多分マシン依存。
od
デフォルトでは8進出力、-x だと2バイト単位で16進出力。フォーマットの指定は hexdump と比べると遥かに簡単。
od -t x1
shinh さんは
od -A x -t x1z
らしい。
面倒なので、あとは man で。
xxd
vim についてくるやつ。個人的には一番良く使うのはこれ。
デフォルトでは2バイト単位で16進出力だが、1バイト単位にしたければ
xxd -g 1
とすればよい。でも、2バイト単位でも big endian なのであまり問題なかったりする。
hexja
よさそうだけど、使ったことは無い。日本語を含むテキストを dump することが多い人はいいかも。