web-dev-qa-db-ja.com

hexdumpを使用して出力のみASCII

出力しようとしていますASCIIいくつかのバイナリデータに対応する値。hexdumpユーティリティをhexdumpおよびASCII side以下のように並べて:

00000120  20 20 20 20 3d 20 30 78  30 30 30 30 30 30 33 30  |    = 0x00000030|
00000130  0a 01 00 00 00 23 00 00  00 75 75 69 64 30 20 20  |.....#...uuid0  |
00000140  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 3d  |               =|
00000150  20 30 78 39 30 38 32 61  63 35 61 0a 01 00 00 00  | 0x9082ac5a.....|
00000160  23 00 00 00 75 75 69 64  31 20 20 20 20 20 20 20  |#...uuid1       |
00000170  20 20 20 20 20 20 20 20  20 20 3d 20 30 78 37 34  |          = 0x74|
00000180  61 37 34 37 36 66 0a 01  00 00 00 23 00 00 00 75  |a7476f.....#...u|
00000190  75 69 64 32 20 20 20 20  20 20 20 20 20 20 20 20  |uid2            |
000001a0  20 20 20 20 20 3d 20 30  78 61 32 35 35 35 63 30  |     = 0xa2555c0|

ただし、出力値としてASCIIのみを表示します。16進値には興味がありません。たとえば、出力は次のようになります(上記に対応) :

= 0x00000030.....#...
uuid0=0x9082ac5a.....
uuid1=0x74a7476f

(これにはhdのスイッチを使用できませんでした。)

22
recluze

バイナリファイルのテキストコンテンツのみを表示する必要がある場合は、 strings が便利です。

指定された各ファイルについて、GNU stringsは、少なくとも4文字の長さの印刷可能な文字シーケンス(または-nオプションで指定された数字)を出力し、その後に続きますstringsは、主に非テキストファイルの内容を判別するのに役立ちます。

35
raina77ow

raina77owからの回答strings(1)コマンドについては、実際に必要な結果を得るための正しい方法ですが、 hexdump(1) いくつかのコンテキストでは、印刷可能な文字のみを除外することは意味があります。具体的には、ここで対応します。

Hexdumpユーティリティは、驚くほど一般化されたフォーマットエンジンをサポートすることが判明しました。これはおそらく、選択可能なさまざまな形式の実装をより均一にするために行われたものです。 hexdumpのコピーが-eコマンドラインオプションを介してそのエンジンを公開している場合(多くの場合)、実際に要求どおりに実行させることができます。

キーは-eオプションとそれがサポートするフォーマット言語です。その言語では、入力のバイトを消費してテキストを生成するフォーマット文字列を指定できます。次のようなコマンド

$ hexdump -e "16 \"%_p\" \"\\n\"" hexdump.exe | head -16

一度に16バイトを消費し、%_p形式で表示し、16バイトごとに改行を追加します。出力では、印刷できない文字はそれぞれ.に置き換えられます。

考慮すべきその他の文字指向形式は、%_cおよび%_uです。最初の文字は、非印刷文字をANSI-Cエスケープシーケンスまたは3桁の8進数で置き換えます。 2番目は、非印刷の各文字をASCII制御文字の従来の名前、または2桁の16進数で置き換えます。

hexdumpのコピーに-eオプションがないか、遅い場合、またはhexdumpの実装がまったくない場合は、最近、hexdumpの自由にライセンスされた、高速で、合理的な実装があります William Ahernによってリリースされました) は一見の価値があります。多くのUnixライクなシステム用にすぐにビルドでき、WindowsでMingW GCCを使用してビルドするのはわずかな微調整のみです。この実装の重要な属性は、単一のソースファイルを、 Lua から使用するLuaモジュール、およびhexdumpを実装するスタンドアロンの実行可能ファイルとして、別のプログラムに含めるための共有ライブラリとして構築できることです。コマンド。

8
RBerteig

od を使用できます。

od -t c file

またはawkhexdumpのように:

hexdump -C file | awk '{for(i=NF; i>17; --i) print $i}'

注:hexdumpの列数を変更する場合は、awkコマンドを変更する必要があります。

7
iabdalkader
hexdump -C file /dev/sda4|cut -c 62-77

それが役に立てば幸い

1
Ahtisham Wani