如何使用xxd在hexdump中插入偏移量?

3
有没有一种简单的方法可以为由xxd生成的十六进制转储添加偏移量?
即,而不是
0000: <data>
0004: <data>
0008: <data>

我应该获取

Offset+0000: <data>
Offset+0004: <data>
Offset+0008: <data>
4个回答

6

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,确保它具有偏移量支持。


1
就Ubuntu trusty而言,xxd(vim 7.4.052)不支持-o,在xenial(vim 7.4.1689)中支持。如果您想在trusty上使用它,请访问https://launchpad.net/~pkg-vim/+archive/ubuntu/vim-daily的PPA安装vim 7.4.826,这已经足够新了。 - Roger Lipscombe
太棒了!这是我一直需要的,以前必须手动计算。 - debuti

1

这是我目前正在做的事情… 它完美地运作,但对于仅添加偏移量而言,它有点糟糕的方法 :)

xxd file.bin | xxd -r -s 0x2e00000 | xxd -s 0x2e00000 > file.hex

0
阅读您下面的评论:

我想让二进制文件的第一个字节出现在偏移量处。即只需添加偏移量而不需要寻找。

这让我相信唯一的方法是解析输出并修改它以添加所需的偏移量。
很抱歉,我没有在文档中找到任何可以轻松完成此操作的内容。 :(

它将在二进制输入文件中查找并跳过偏移字节。我希望二进制文件的第一个字节位于偏移量处,即仅添加偏移量而不进行搜索。 - Jean

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更有“脚本感”:-)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接