![比较具有不同元数据的二进制文件](https://linux22.com/image/1567864/%E6%AF%94%E8%BE%83%E5%85%B7%E6%9C%89%E4%B8%8D%E5%90%8C%E5%85%83%E6%95%B0%E6%8D%AE%E7%9A%84%E4%BA%8C%E8%BF%9B%E5%88%B6%E6%96%87%E4%BB%B6.png)
在 Windows 中,我希望将旧的二进制文件与新构建的文件进行比较,以确定哪些文件已更新。但是,当我构建文件时,我会为它们提供新的元数据详细信息(如版本等)。通过右键单击文件并转到“详细信息”选项卡,您可以查看文件版本和其他信息。这会导致比较结果不同。是否可以解决这个问题以检查哪些文件相同或不同?
答案1
给安格斯约翰逊的资源黑客试试吧。这个免费工具将允许您查看(甚至编辑)只要 PE 或库是使用资源编译的,则给定可执行文件中的资源表Version Info
。请记住,您无法查看或编辑模糊二进制文件中的资源文件。
答案2
更新:
我重新阅读了您的评论,在我看来,您想比较可执行文件和库的版本信息,而不是检查文件的完整性。
首先,你需要明白,没有“元数据头”这样的术语。Windows 上的可执行文件和库有所谓的“资源”在编译/链接时链接到最终文件。这不是必需的,因此程序员可以使用资源或直接跳过它。在文件的资源中,几乎可以打包任何东西,图标、声音、图片、恶意加密负载等等。在同一个资源文件中,程序员可以指定其他文本信息,例如文件版本。您需要了解,在某些语言中,文件版本不会自动更新,更改文件版本是程序员的手动工作。
好的,让我们回到主题,我猜您想比较可执行文件/库文件之间的文件版本,因此您可以使用命令行工具在 Microsoft 官方实用程序的帮助下从资源中提取文件版本,sigcheck.exe
这是来自Sysinternals 套件。如果您要sigcheck.exe
在具有资源的可执行文件上运行,那么该程序将提取您提到的“元数据”:
Publisher:
Company:
Description:
Product:
Prod version:
File version:
您可以解析需要与您首选工具进行比较的更多字段。
如果你可以使用 Windows API,你可以通过使用以下方式以编程方式从资源中提取“元数据”文件版本信息韓式介面。
先前的猜测:
既然你提到了compare old binary files with newly built ones
,那么对你来说最好的选择就是使用版本控制系统例如git或者化石除了方便跟踪源文件之外,还可以跟踪二进制文件的变化。
您还可以通过多种方式比较二进制文件:
标准的 Unixdiff
实用程序可以比较二进制文件,它只是判断文件是否不同。
(如果你使用的是 Windows 10,你可以使用西弗吉尼亚海岸运行本地 unix 实用程序)
还有visual binary diff
可以在 Windows 和 Unix 上运行。
本机窗口实用程序fc
也可以进行二进制比较fc /b file1 file2
您可以使用可以计算的资源管理器扩展哈希例如二进制文件哈希校验,目录哈希甚至使用微软的fciv
如果你使用 Microsoft Visual Studio,你也可以使用温控器
对于大型文件(以 TB 为单位)的比较,您可以使用旧的氢键