是否有一种简单的方法可以为xxd生成的十六进制转储添加偏移量?
,而不是
0000: <data>
0004: <data>
0008: <data>
我应该
Offset+0000: <data>
Offset+0004: <data>
Offset+0008: <data>
答案 0 :(得分:1)
这就是我现在正在做的事情。它运作得很完美,但它只是添加偏移量的一种蹩脚方法:)
xxd file.bin | xxd -r -s 0x2e00000 | xxd -s 0x2e00000 > file.hex
答案 1 :(得分:1)
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。
答案 2 :(得分:0)
阅读下面的评论:
我希望二进制文件的第一个字节出现在偏移处。即只需添加偏移而不寻求。
让我相信唯一的方法是解析输出并修改它以添加所需的偏移量。
我没有在文档中找到任何可以轻松完成此操作的内容,抱歉。 :(
答案 3 :(得分:0)
如果你能与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只是感觉更像“script-ish”: - )