LINUX.ORG.RU

Ищу навороченный diff для бинарников

 ,


1

1

Пробовал несколько (dhex, что-то с длинным названием, ещё что-то с незапоминающимся названием) и понял что ncurses не справляется. Так что желательно что-то графическое.
Мне нужен довольно навороченный diff с возможностью редактирования, поиска, подсветкой и другими плюшками о которых я ещё не догадываюсь.
Я хочу иметь возможность сравнивать 3 файла одновременно.
Да, поиск мне желателен в разных системах счисления и чтобы байты оно само переворачивало.
В общем я хочу полезную программу.
Кто у нас нынче считается лучшим в этом плане?

Deleted

Ответ на: комментарий от anonymous

Ну вот есть wxHexEditor. Вроде можно открыть рядом две колонки с разными файлами, но смещаться по ним синхронно уже не получается. Т.е. неудобно даже в таком базовом моменте.

Deleted
()

Тут «обычного» hex редактора нормального нет, а ты хочешь вообще нечто фантастическое )

010hexeditor что-то может. Я сам vbindiff использую, но из перечисленного он не может вообще ничего )))

vasily_pupkin ★★★★★
()

С трудом себе представляю эффективный алгоритм бинарного diff. Первое расхождение найти легко, а что дальше, какие куски и по каким смещениям можно считать частями прежнего файла? Хотя если файлы одинаковой длины, подсветить различия уже не так сложно.

I-Love-Microsoft ★★★★★
()
Последнее исправление: I-Love-Microsoft (всего исправлений: 1)
Ответ на: комментарий от I-Love-Microsoft

Да просто обычно для начала нужно увидеть, есть ли что-то общее в файлах, или есть ли различия. Об отображении именно изменений в случае с бинарными файлами речи не идет. Файлы вообще могут не иметь общей истории в том смысле, что один был получен из другого путем некой модификации.

zloy_starper ★★★
()
Ответ на: комментарий от I-Love-Microsoft

С трудом себе представляю эффективный алгоритм бинарного diff.

Почитай про расстояние Левенштейна (редакционное расстояние). Проблема в том, что для его вычисления при наивной реализации нужно O(M*N) памяти и столько же времени, где M и N - длины сравниваемых файлов. Можно оптимизировать потребеление памяти до O(min(M,N)). То есть, чтобы сравнить два гигабайтных файла нужно столько же памяти, а времени - не дождешься.

При этом расстояние Левенштейна не видит (не распознает) перемещение, копирование, обмен блоков. Есть расстояние Домерау-Левенштейна которое может определить еще обмен соседних элементов, но не блоков.

anonymous
()
Ответ на: комментарий от I-Love-Microsoft

какие куски и по каким смещениям можно считать частями прежнего файла?

В чем принципиальное отличие от поиска в тексте?

trex6 ★★★★★
()
Ответ на: комментарий от trex6

В чем принципиальное отличие от поиска в тексте?

Ответ 5-звездного эксперта.

И что ты будешь искать? Все возможные подстроки одного файла в другом файле? Таких подстрок - N^2/2 (вроде). И сложность будет O(M*N^2).

Для текстовых диффов есть легальный хак - элементом является целая строка. Что резко уменьшает M и N. И для этих строк из элементов-строк можно применить Левенштейна. Потом можно дополнительно сравнить изменившиеся строки и показать что именно изменилось в строке.

anonymous
()
Ответ на: комментарий от vasily_pupkin

Okteta вполне ничего вроде бы. Конечно, она «субъективно» проигрывает winhex родом из 90х по всем параметрам, видимо это слишком непопулярная задача. Приучили-таки пользовательскую базу кушать, что дают, эх. Нет больше того исследовательского духа в людях. Хотелось бы увидеть некоторые улучшения в okteta. И она только что 2 раза уронила мне kdeinit5, хотелось бы без этого.

linuxnewb13
()

Мне нужен довольно навороченный diff с возможностью редактирования

Хмм. Интересное кино. Но стандартный diff ничего не редактирует. И в этом есть смысл. Так речь за diff или за «что-то другое, но не diff»?

anonymous
()

Я хочу иметь возможность сравнивать 3 файла одновременно.

Очевидный хак - base64 с разбиением на строки по комбинации символов, выбранных по своему усмотрению. А дальше meld.

anonymous
()
Ответ на: комментарий от I-Love-Microsoft

а что дальше, какие куски и по каким смещениям можно считать частями прежнего файла?

Бинарный diff - это сравнение байтов в одной и той же позиции в двух и более файлах. Всё остальное не имеет значения.

iZEN ★★★★★
()
Последнее исправление: iZEN (всего исправлений: 1)
Ответ на: комментарий от iZEN

Бинарный diff - это сравнение байтов в одной и той же позиции в двух и более файлах. Всё остальное не имеет значения.

Если в новом файле появился только один дополнительный байт между байтами, то это удобно знать.

x905 ★★★★★
()
16 октября 2020 г.

чисто для инфо, если кто-то наткнется на тему, то hexinator годный редактор с поддержкой грамматик и полным их комплектом. А то задолбался искать. @saahriktu спасибо, с твоего поста нашел

zendrz ★★
()
Ответ на: комментарий от anonymous

Очевидный хак - base64 с разбиением на строки по комбинации символов

Категорически поддерживаю.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.