Разобрать текстовый файл с адресами, значениями байтов и комментариями к бинарному файлу

Старайтесь не указывать полный путь при указании пути к каталогу, используйте относительный путь, так будет проще при восстановлении.

0
27.04.2020, 03:39
2 ответа

Начнем с вашегоconfig.src:

$ cat config.src
00: 42 ; byte 0 is 0x42 / d
01: 52 ; byte 1 is 0x52 / r
02: 62 ; byte 2 is 0x62 / D
03: 72 ; byte 3 is 0x72 / R
07: 1f ; bytes 03..0e are implicitly 00, byte 0f is 0x1f

Преобразование в config.bin, комментарии пропускаются-c1:

$ xxd -r -c1 config.src config.bin
$ xxd config.bin
00000000: 4252 6272 0000 001f                      BRbr....

Конвертировать обратно в формат config.src:

$ xxd -c1 config.bin # this is unmodified
00000000: 42  B
00000001: 52  R
00000002: 62  b
00000003: 72  r
00000004: 00 .
00000005: 00 .
00000006: 00 .
00000007: 1f .
$ xxd -c1 config.bin | awk -F '' '
  {
    $0=substr($0, 7)    # remove 6 leading characters
    $0=substr($0, 1, 6) # remove ASCII output
  }
  /00$/{ next }      # skip hex 00
  { print $0 " ; " } # print line and empty comment
'
00: 42 ;
01: 52 ;
02: 62 ;
03: 72 ;
07: 1f ;
0
19.03.2021, 02:25

Вы можете попробовать функцию Perl pack.

Пр. дано

$ cat config.src
00: 42 ; byte 0 is 0x42 / d
01: 52 ; byte 1 is 0x52 / r
02: 62 ; byte 2 is 0x62 / D
03: 72 ; byte 3 is 0x72 / R
07: 1f ; bytes 03..0e are implicitly 00, byte 0f is 0x1f

, затем

$ perl -ne 'm/(\d+): ([[:xdigit:]]{2})/; while($n++ < $1){print pack("x")}; print pack("H*",$2)' config.src | xxd -c1
00000000: 42  B
00000001: 52  R
00000002: 62  b
00000003: 72  r
00000004: 00 .
00000005: 00 .
00000006: 00 .
00000007: 1f .
0
19.03.2021, 02:25

Теги

Похожие вопросы