Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > найти дельту изменений exe


Автор: Nutz 1.2.2010, 15:18
Доброго времени суток. В общих чертах нужно написать приложение, которое бы сравнивало старую версию программы с новой (exe) и выводило бы дельту изменений. т.е. как я понял нужно сравнивать бинарный код exe'шников и вывести блоки вставки.

Автор: Snowy 1.2.2010, 17:29
Что такое "дельта изменений"?
Чем не подходит родная виндовая
fc /b file1 file2

Автор: Nutz 1.2.2010, 18:06
delta изменений - это условно. попробую объяснить иначе: есть 2 exe (оригинал и его измененная копия).

к примеру в оригинале по нажатию на кнопку выводится сообщение "Hello World".
в копии же все тоже самое но текст сообщения другой, например "Привет Мир".

Нужно сравнить и вывести участки бинарного кода с несоответвием.

Автор: Snowy 1.2.2010, 18:27
Для этого в Windows (и даже в DOS) есть родная комманда - fc
сравнивает текстовые и бинарные файлы.
работает в стандартной консоли
набрать fc /? - все про себя расскажет
с ключём /b сравнивает бинарные файлы
вывод стандартный. Можно перенаправить в файл или захватить пайпом.
Я и спрашиваю, чем не устраивает родной инструмент?

Автор: former 1.2.2010, 18:31
В дополнение к предложению Snowy, можно посмотреть, как это реализовано в различных редакторах с открытым исходным кодом (типа Notepad++).

Автор: Nutz 1.2.2010, 18:43
Цитата(Snowy @  1.2.2010,  18:27 Найти цитируемый пост)
Snowy


вывода собственно самих участков с несоответствями не наблюдаю. выводится весь бинарный код, что для первого, что для второго.

Добавлено через 3 минуты и 9 секунд
блин не туда посмотрел. все верно.
а как перенаправить найденный различия в файл

Автор: former 1.2.2010, 18:49
Цитата(Nutz @  1.2.2010,  18:43 Найти цитируемый пост)
а как перенаправить найденный различия в файл 

http://www.sql.ru/forum/actualthread.aspx?tid=640643

Автор: Nutz 1.2.2010, 18:59
В продолжение темы... Допустим, я получил различия. Как мне применить изменения к старой версии exe (file1), чтобы file1 = file2

Автор: former 1.2.2010, 20:31
Цитата(Nutz @  1.2.2010,  18:59 Найти цитируемый пост)
В продолжение темы... Допустим, я получил различия. Как мне применить изменения к старой версии exe (file1), чтобы file1 = file2 

в библиотеке JEDY есть компонент TJvPatchFile.

Автор: bems 1.2.2010, 23:23
скопировать файл2 в файл1 с заменой

Автор: Nutz 2.2.2010, 14:33
Цитата(Snowy @  1.2.2010,  17:29 Найти цитируемый пост)
fc /b file1 file2


Все бы и хорошо, но при значительных изменнениях, результутирующий файл после выполнения команды оказывается, как минимум, в 10-15 раз больше собственно самого исполняемого (который сравниваем).

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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)