инструменты для различения двоичных файлов Windows? - PullRequest
3 голосов
/ 06 декабря 2008

Наша команда QA хочет сфокусировать свое тестирование на том, какие EXE и DLL фактически изменились между сборками. У нас есть хороший отчет об изменениях в SVN, но связь между исходным кодом и измененными двоичными файлами не всегда очевидна. Сборки, которые мы сравниваем, всегда полностью чистые, поэтому мы не можем использовать временные метки файловой системы. Я ищу инструменты для сравнения бинарных файлов Windows (и Windows CE), которые будут игнорировать встроенные метки времени и другие ошибки. Какие-нибудь рекомендации для инструментов или других способов создания надежного отчета «какие двоичные файлы действительно изменились»? Спасибо.

уточнение: Спасибо за ответы, но мы не можем сгенерировать отчет, выполняя прямое побайтное сравнение или сравнивая контрольные суммы, потому что все файлы выглядят по-разному каждый раз, когда мы строим, даже если источники не имеют ' t изменилось из-за временных меток, которые вставляет компилятор. Проблема в том, как игнорировать ложные срабатывания. Я думаю, что идея дизассемблирования и сравнения ближе всего к тому, что нам нужно ...

ответил! Bindiff - это то, что я искал. Большое спасибо.

Ответы [ 8 ]

4 голосов
/ 06 декабря 2008

Вы смотрели на Bindiff ?

2 голосов
/ 06 декабря 2008

Я столкнулся с этой проблемой раньше. Моим решением было написать инструмент, который установил бы все метки времени в .EXE / .DLL на известное значение. Я бы запустил его как шаг после сборки. Тогда бинарные различия будут работать нормально.

1 голос
/ 06 декабря 2008

Посмотрите на NDepend .

1 голос
/ 06 декабря 2008

Не уверен, что за двоичные файлы (DLL? Только для исполняемых файлов PE / WinCE? Другие?) Можно ли встраивать информацию о версии в двоичные файлы, например, используя тег управления исходным кодом, который обновляет версию в исходном коде при фиксации. Затем, когда создается новая сборка, в двоичном файле также обновляется строка версии. Вместо того, чтобы различать двоичный файл, вы можете использовать строку версии и проверить ее на наличие изменений.

1 голос
/ 06 декабря 2008

Вы могли бы, возможно, разобрать двоичный файл, а затем сделать различие в сборке ...

Звучит так, будто ваша команда по обеспечению качества придерживается неправильного подхода ... Для них не должно иметь значения, как выглядит код; просто он делает то, что должен.

Edit: Ой! Прочитав его еще раз, я понял, что неправильно понял ваш вопрос. Я думал, что они хотели проверить методы, которые изменились ...

В таком случае, почему бы не получить хэш MD5 и сравнить его? Самое маленькое изменение приведет к созданию совершенно другого хэша.

0 голосов
/ 06 декабря 2008

GNU binutils специально строки

0 голосов
/ 06 декабря 2008

Генератор графа зависимостей проекта и Dependency-Grapher для C ++ - Проекты оба используют GraphViz для визуализации зависимостей. Я полагаю, что вы могли бы использовать любой из них в качестве основы для ваших нужд со специальным выделением ветвей в графе зависимостей, где изменились исходные файлы или другие листья.

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

0 голосов
/ 06 декабря 2008

Когда я работал над «доморощенным» инструментом для проверки установки в своей компании, мы использовали Beyond Compare в качестве бэкэнда для сравнения.

Имеет отличные возможности сравнения файлов и папок (в двоичном виде) и возможности сценариев и может выводить отчеты XML.

...