我先给你一些背景知识,为什么我要问这个问题:
我目前在一个受到严格监管的行业工作,因此我们的代码由官方测试机构仔细检查。这些测试机构希望能够构建代码并生成每次都完全相同的 .exe 或 .dll(显然无需更改任何代码!)。他们检查他们创建的可执行文件的 MD5 和 SHA1 以确保这一点。
到目前为止,我主要使用 C++ 进行编码,其中(经过一些项目设置调整)我设法让项目以一致的方式重建为相同的 MD5/SHA1。我现在在一个项目中使用 C#,并且在重建后很难让 MD5 匹配。我知道文件的 PE 头中有“时间戳”,它们已被清除为 0。我还知道 .exe 有一个 GUID,它再次被清除为 00 00 00 ...等等。但是文件仍然不匹配。
我正在使用 CFF Explorer 查看和编辑 PE 标头以删除时间和日期戳。使用二进制比较工具后,.exe 中只有 2 个不同的字节块(都非常小)。
不一致的块之一出现在*Project*\obj\Release\xxx.pdb
一些二进制代码之前,它以 ASCII 格式详细说明了文件的路径。
编辑:现在已知这是 *.pdb 文件的 GUID,但是我仍然不知道是否可以修改它而不会导致任何错误!?
另一个块出现在看起来是函数名称的中间,即。(典型部分)AssemblyName.GetName.Version.get_Version.System.IO.Ports.SerialPort.Parity.Byte.<PrivateImplementationDetails>{
然后是不同的代码块:
4A134ACE-D6A0-461B-A47C-3A4232D90816
其次是:
"}.ValueType.__StaticArrayInitTypeSize=7.$$method0x60000ab-1.RuntimeFieldHandle.InitializeArray`... 等等。
任何想法或建议都将受到欢迎!