每次重新编译后的Exe校验和不同
exe checksum different after each recompile
所以我想弄清楚如何让我的exe在重新编译时具有相同的哈希码/校验和。我使用FastSum来生成校验和。目前,没有代码更改,我只是在VS中重建项目,校验和出现不同。代码是用c++编写的。
我不熟悉以这种方式使用哈希码和/或校验和,但我做了一些研究并阅读了一些关于需要一致GUID的内容。但我不知道这将如何连接到校验和生成程序…
好吧,我就讲到这里,提前谢谢你。
你检查过前任之间的差异吗?我怀疑编译器/链接器正在将日期或时间插入二进制文件中,因此每个二进制文件将与另一个不同。或者可能更糟,有时编译器/链接器在自己的系统内存中构建静态表,然后将其复制到二进制文件中,假设你有9个字节的东西,出于对齐原因,编译器选择在二进制文件中使用12个字节,我见过编译器/链接器在该计算机的系统内存中获取任何3个字节,并将其复制到文件中。理想情况下,您希望工具将它们用于此类事情的内存归零,以便获得可重复的结果。
基本上在两个文件之间进行二进制差异,然后找出它们不匹配的原因。
根据我的回忆,EXE格式包括一个构建时间戳,因此EXE的哈希值,包括该时间戳,将在每次重新编译时更改。
这是一个托管二进制文件吗?托管二进制文件有一个GUID部分,它会随着构建的不同而改变,你无法阻止它。
您可以通过运行"link/dump/all [filename]"或"link/dump/disasm [filename]"来更好地查看二进制文件中的更改。/all选项将向您显示所有十六进制值以及它们的等效ascii值,而/disasm选项将反汇编代码并以汇编形式显示给您,这可能更易于阅读,但可能会忽略一些可能导致散列更改的琐碎差异。
- 如何用尽可能少的数据将数据缓冲区计算为零校验和值
- 计算校验和的逐位运算符
- 如何从存储在 QByteArray 中的十六进制值计算校验和
- 如何在 c++ 中计算对象的哈希/校验和/指纹?
- C++文件传输的校验和算法
- 如何从 IP 校验和字段中计算十六进制值
- 计算句子的校验和(XOR)(由不同变量/类型的组合形成)
- 目录校验和
- 编译后如何计算某些二进制功能(或基本块)的校验和
- PMS5003带有ESP8266-许多校验和错误
- 未正确的校验和释放对象 - 打印时错误
- 将C++校验和函数转换为 Java
- 确定是否使用boost.asio计算UDP校验和
- 校验和CRC 16从C 到Java
- 不同的CRC32校验和同一文件
- Qt,tcp/ip通信校验和
- 正在计算ICMP数据包校验和
- 错误的校验和错误遍布程序
- 如何计算 dmg 文件上的主校验和和数据分叉校验和
- 每次重新编译后的Exe校验和不同