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

时间:2012-04-19 17:31:11

标签: linux hex offset dump xxd

是否有一种简单的方法可以为xxd生成的十六进制转储添加偏移量?

,而不是

0000: <data>
0004: <data>
0008: <data>

我应该

Offset+0000: <data>
Offset+0004: <data>
Offset+0008: <data>

4 个答案:

答案 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”: - )