有没有一种简单的方法可以向 xxd 生成的十六进制转储添加偏移量?
即代替
0000: <data>
0004: <data>
0008: <data>
我应该得到
Offset+0000: <data>
Offset+0004: <data>
Offset+0008: <data>
xxd
现在似乎带有偏移支持,使用-o [offset]
例如:xxd -o 0x07d20000 file.bin
我xxd
在 Gentoo Linux 上的版本有它,但我更深入地挖掘以帮助其他发行版的人们:
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 只是感觉更“脚本式”:-)