Каков наилучший способ сравнения, если два двоичных файла (C ) эквивалентны в Linux, игнорируя метаданные?

#c #linux #binary #diff #patch

#c #linux #двоичный #разница #исправление

Вопрос:

Я пытаюсь проверить, какие двоичные файлы отличаются в каталоге, чтобы создать исправление, заменяющее старый двоичный файл. У меня есть доступ к исходному коду и репозиторию (GIT). Когда я сравниваю два двоичных файла, сгенерированных из одного и того же исходного кода, используя diff или cmp двоичные файлы, сообщается, что они разные. Я предполагаю, что это связано с метаданными или другими данными, которые компилируются в код, но не имеют отношения к тому, как ведут себя двоичные файлы.

В идеале я хотел бы сравнить двоичные файлы, игнорируя любые «дополнительные» данные. Если это невозможно, я хотел бы скомпилировать двоичные файлы, удалив любые «лишние» данные, чтобы один и тот же исходный код генерировал одинаковые точные двоичные файлы. Многие двоичные файлы имеют перекрестные зависимости, когда один двоичный файл используется другим двоичным файлом, и поэтому, если один двоичный файл изменяется, другой также должен быть заменен.

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

Комментарии:

1. Почему вы предполагаете, что разница связана с метаданными или другими данными, которые компилируются в код, но не имеют отношения к тому, как ведут себя двоичные файлы?

2. Версия компилятора X, скорее всего, создаст двоичный файл, отличный от версии компилятора Y. Видимое поведение должно быть одинаковым (за исключением UB ), но метод, используемый для создания поведения, может радикально отличаться.

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

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

5. @jdigital, спасибо за предложение. Как бы вы внедрили код и извлекли код из двоичного файла?