Как я сравниваю двоичные файлы в Linux?

Я должен сравнить два двоичных файла и получить вывод в форме:

<fileoffset-шестнадцатеричный> <file1-byte-hex>-<file2-byte-hex>

для каждого различного байта. Итак, если file1.bin

  00 90 00 11

в двоичной форме и file2.bin

  00 91 00 10

Я хочу получить что-то как

  00000001 90 91
  00000003 11 10

Существует ли способ сделать это в Linux? Я знаю о cmp -l но это использует десятичную систему счисления для смещений и восьмеричный для байтов, которых я хотел бы избежать.

314
задан 26.11.2018, 23:13

3 ответа

Это распечатает смещение и байты в шестнадцатеричном числе:

cmp -l file1.bin file2.bin | gawk '{printf "%08X %02X %02X\n", $1, strtonum(0$2), strtonum(0$3)}'

Или сделайте $1-1 чтобы иметь первое печатное смещение запускаются в 0.

cmp -l file1.bin file2.bin | gawk '{printf "%08X %02X %02X\n", $1-1, strtonum(0$2), strtonum(0$3)}'

К сожалению, strtonum() характерно для ПРОСТОФИЛИ, таким образом, для других версий awk — например, mawk — необходимо будет использовать восьмеричную к десятичному числу функцию преобразования. Например,

cmp -l file1.bin file2.bin | mawk 'function oct2dec(oct,     dec) {for (i = 1; i <= length(oct); i++) {dec *= 8; dec += substr(oct, i, 1)}; return dec} {printf "%08X %02X %02X\n", $1, oct2dec($2), oct2dec($3)}'

Вспыхнувший для удобочитаемости:

cmp -l file1.bin file2.bin |
    mawk 'function oct2dec(oct,    dec) {
              for (i = 1; i <= length(oct); i++) {
                  dec *= 8;
                  dec += substr(oct, i, 1)
              };
              return dec
          }
          {
              printf "%08X %02X %02X\n", $1, oct2dec($2), oct2dec($3)
          }'
178
ответ дан 16.12.2019, 22:45

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

Для подхода строго командной строки попробуйте jojodiff.

59
ответ дан 16.12.2019, 22:45

Поскольку ~quack указал:

 % xxd b1 > b1.hex
 % xxd b2 > b2.hex

И затем

 % diff b1.hex b2.hex

или

 % vimdiff b1.hex b2.hex
171
ответ дан 16.12.2019, 22:45

Теги

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