Простым решением будет стандартизация ваших путей сборки, поэтому они всегда имеют форму, например:
c:\buildXXXX
Затем, когда вы сравните, скажем, build0434 с build0398, просто препроцессор двоичный, чтобы изменить все вхождения build0434 в build0398. Выберите шаблон, который, как вы знаете, вряд ли появится в вашем фактическом источнике / данных, за исключением тех строк, которые компилятор / компоновщик встраивается в PE.
Тогда вы можете просто провести свой обычный анализ разницы. Используя одинаковые пути, вы не будете перемещать какие-либо данные и вызывать ложные срабатывания.
Еще один совет - использовать dumpbin.exe (поставляется с MSVC). Используйте dumpbin / all , чтобы сбрасывать все детали двоичного файла в текстовый / шестнадцатеричный дамп. Это может сделать более очевидным, чтобы увидеть, что / где меняется.
Например:
dumpbin /all program1.exe > program1.txt
dumpbin /all program2.exe > program2.txt
windiff program1.txt program2.txt
Или используйте свой любимый инструмент для обработки текста вместо Windiff.
Вы можете найти инструмент bindiff.exe от Microsoft, который можно получить здесь:
Инструменты поддержки Windows XP с пакетом обновления 2 (SP2)
Он имеет опцию / v, чтобы указать ему игнорировать определенные двоичные поля, такие как метки времени, контрольные суммы и т. д .:
«BinDiff использует специальную процедуру сравнения для Win32 исполняемые файлы, которые маскируют различные метки времени сборки в обоих файлах при выполнении сравнения. Это позволяет отмечать два исполняемых файла как «Near Identical», когда файлы действительно идентичны, за исключением того времени, когда они были созданы ».
blockquote>Однако, похоже, что вы уже делаете надмножество того, что делает bindiff.exe.
Думаю, вы столкнулись с этой проблемой .
Ядро Linux выдаст ошибку неверный интерпретатор: текстовый файл занят
, если ваш Perl сценарий (или любой другой сценарий) открыт для записи, когда вы пытаетесь его выполнить.
Вы не говорите, что делали процессы, интенсивно использующие диск. Возможно ли, что у одного из них был открыт сценарий для чтения и записи (даже если он на самом деле ничего не писал)?
Это всегда связано с тем, что интерпретатор Perl (/ usr / bin / perl) недоступен. Фактически, это происходит, когда запущен сценарий оболочки или awk, или что-то еще в #! строка в верхней части скрипта.
Причиной может быть много вещей ... Perms, заблокированный файл, файловая система отключена, и так далее.
Очевидно, это будет зависеть от того, что происходило именно в тот момент, когда вы запускали это когда возникла проблема. Но я надеюсь, что это именно то, что вы искали.