xxdによって生成された16進ダンプにオフセットを追加する簡単な方法はありますか?
すなわちの代わりに
0000: <data>
0004: <data>
0008: <data>
私は得る必要があります
Offset+0000: <data>
Offset+0004: <data>
Offset+0008: <data>
xxd
を使用して、オフセットサポートが付属しているように見えます-o [offset]
例えば:xxd -o 0x07d20000 file.bin
Gentoo Linuxの私のバージョンにxxd
はそれがありますが、他のディストリビューションの人々を助けるために深く掘り下げました:
xxd V1.10 27oct98 by Juergen Weigert
--xxdバージョンを使用しないでください-オフセットサポートなしでこのソースコードを見つけました!! だから私は私のバイナリがどこから来たのかを追跡しました:
app-editors/vim-core-7.4.769
-明らかに、最新のVIMがインストールされている限り、追加されたオフセットサポートのメリットを享受できます。少なくともGentooについては、私はあなたを正しい方向に導いています。
ディストリビューションがまだ古いxxdを出荷していることがわかった場合は、オフセットサポートがあることを確認した新しいVIMを手動でコンパイルすることを検討してください。
これは私が今していることです..それは完璧に機能しますが、オフセットを追加するだけのその種の不完全なアプローチ:)
xxd file.bin | xxd -r -s 0x2e00000 | xxd -s 0x2e00000 > file.hex
以下のコメントを読んでください:
バイナリファイルの最初のバイトをオフセットに配置したいと思います。つまり、シークせずにオフセットを追加するだけです。
これを行う唯一の方法は、出力を解析して変更し、目的のオフセットを追加することだと私は信じています。
申し訳ありませんが、これを簡単に実行できるドキュメントは見つかりませんでした。:(
AWKと一緒に暮らすことができる場合は、ここに概念実証があります。
$ xxd random.bin | gawk --non-decimal-data ' # <-- treat 0x123 like numbers
> {
> offset = 0x1000 # <-- your offset, may be hex of dec
>
> colon = index($0, ":") - 1
> x = "0x" substr($0, 1, colon) # <-- add 0x prefix to original offset ...
> sub(/^[^:]*/, "") # <-- ... and remove it from line
>
> new = x + offset # <-- possible thanks to --non-decimal-data
> printf("%0"colon"x", new) # <-- print updated offset ...
> print # <-- ... and the rest of line
> }'
0001000: ac48 df8c 2dbe a80c cd03 06c9 7c9d fe06 .H..-.......|...
0001010: bd9b 02a1 cf00 a5ae ba0c 8942 0c9e 580d ...........B..X.
0001020: 6f4b 25a6 6c72 1010 8d5e ffe0 17b5 8f39 oK%.lr...^.....9
0001030: 34a3 6aef b5c9 5be0 ef44 aa41 ae98 44b1 4.j...[..D.A..D.
^^^^
updated offsets (+0x1000)
PerlやPythonの方が短いと思いますが、AWKはもっと「スクリプトっぽい」と感じます:-)