Как вставить смещение в hexdump с xxd?
Есть ли простой способ добавить смещение к шестнадцатеричному дампу, сгенерированному xxd?
т.е. вместо
0000: <data>
0004: <data>
0008: <data>
Я должен получить
Offset+0000: <data>
Offset+0004: <data>
Offset+0008: <data>
4 ответа
Это то, что я делаю сейчас.. Это работает отлично, но это своего рода неудачный подход для простого добавления смещения:)
xxd file.bin | xxd -r -s 0x2e00000 | xxd -s 0x2e00000 > file.hex
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, который поддерживает смещение.
Если вы можете жить с 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 просто чувствует себя более "сценарием":-)
Читая ваш комментарий ниже:
Я хочу, чтобы первый байт двоичного файла присутствовал в смещении. т.е. просто добавить смещение без поиска.
заставляет меня поверить, что единственный способ сделать это - анализ выходных данных и изменение их для добавления желаемого смещения.
В документах я не нашел ничего, что позволило бы сделать это легко, извините.:(