比较从相同源代码生成的两个可执行文件的校验和



我有一个关于验证可执行文件的问题,用visual studio编译,使用校验和:如果我从src构建一个项目,我最终会得到一个可执行文件,称为exec1.exe,其中包含一些元数据。如果我以后重新构建相同的src,我会得到另一个可执行文件,比如exec2.exe,它也有自己的元数据部分。

如果我为这两个文件中的每一个创建一个校验和,它们是不同的,因为这两个文件之间的元数据信息是不同的。有人知道当我对文件进行校验和时绕过元数据的方法吗?这样,无论元数据如何,对两个文件进行校验和都会产生相同的校验和值?或者如何编译二进制文件,这样只要src是相同的,我最终得到相同的可执行文件?

提前感谢您的输入,关于

不能保证Visual c++在连续构建中构建相同的源文件时会生成相同的二进制映像。校验和不打算以这种方式使用,经过一些研究,这似乎很难实现。相反,像本文这样的资源可以帮助比较文件。

校验和通常用于查找由于发送/存储数据而导致的错误,而不是用于比较可执行文件的版本/构建。

如果您也有pdb文件,您可以使用DIA sdk来查询用于构建可执行文件的所有源文件。基本上枚举所有的IDiaSourceFile,每个IDiaSourceFile都有一个get_checksum方法。您可以生成主校验和,它是用于生成可执行文件的源文件的所有校验和的组合。如果任何源文件的校验和发生了变化,你可以假设可执行文件也发生了变化。

这是Visual Studio用来确定源文件是否与pdb同步的相同机制,以便可以在调试时进入。

最新更新