Обновление:
я перечитал ваши комментарии, и мне кажется, что вы хотите сравнить информацию о версии из исполняемых файлов и библиотек вместо проверки целостности файлов.
Ну, во-первых, вам нужно понять, что нет таких терминов, как «заголовок метаданных». Исполняемые файлы и библиотеки в Windows имеют концепцию так называемых «ресурсов», которые связаны с окончательным файлом при компиляции / компоновке. Это не требование, поэтому программист может использовать ресурсы или просто пропустить его. В ресурсах файла можно собрать практически все, что угодно: значки, звуки, изображения, вредоносные зашифрованные данные и так далее. В этом же файле ресурсов программист может указать дополнительную текстовую информацию, например, версию файла. Вы должны понимать, что версия файла не продвигается автоматически на некоторых языках, это ручная работа программиста, чтобы изменить версию файла.
Хорошо, давайте вернемся к теме, я думаю, вы хотите сравнить версии файлов между исполняемыми файлами / библиотеками, поэтому вы можете использовать инструмент командной строки для извлечения версии файла из ресурсов с помощью официальной утилиты от Microsoft, sigcheck.exe
которая является частью очень полезных утилит от Sysinternals Suite . Если вы будете работать sigcheck.exe
с исполняемыми файлами, имеющими ресурсы, то эта программа извлечет «метаданные», которые вы упомянули:
Publisher: Company: Description: Product: Prod version: File version:
Вы можете проанализировать другие поля, которые нужно сравнить с предпочитаемым вами инструментом.
Если вы можете использовать Windows API, вы можете извлекать «метаданные» из ресурсов программным способом, используя FileVersionInfo WinAPI.
Предыдущая догадка:
Поскольку вы упомянули compare old binary files with newly built ones
, то лучшим вариантом для вас будет использование систем контроля версий, таких как git или fossil, которые могут отслеживать изменения в двоичных файлах, помимо удобного отслеживания исходных файлов.
Вы также можете сравнить двоичные файлы несколькими способами:
Стандартная diff
утилита Unix, которая может сравнивать двоичные файлы, она просто скажет, отличаются они или нет.
( Если у вас Windows 10, вы можете использовать WSL для запуска нативной утилиты Unix )
Существует также, visual binary diff
что работает на обоих, - Windows и Unix.
Утилита Native Window fc
также может выполнять двоичное сравнение какfc /b file1 file2
Вы можете использовать расширение проводника, которое может вычислять хэш бинарных файлов, например, HashCheck, DirHash или даже использовать Microsoftfciv
Если вы используете Microsoft Visual Studio, вы также можете использовать WinDiff
Для сравнения огромных файлов (в терабайтах) вы можете использовать старый добрый HxD