binary-reproducibility相关内容

为什么 C# 会为相同的源代码生成不同的 EXE?

每次我们重新编译我们的 C# 应用程序时,我们都会得到具有不同 MD5 签名的 EXE.我们在同一台机器上重新编译,相隔几分钟.为什么相同的源代码不会产生相同的输出?有没有办法解决这个问题? 解决方案 “所以每个程序集都有: 两个位置的时间戳 与 PDB 匹配的 GUID 每次编译都会生成一个完全随机的 GUID. 指示程序集的构建是什么的计数器 - 仅在后续 Visual S ..
发布时间:2022-01-17 08:34:11 C#/.NET

为什么 C# 为相同的源代码生成不同的 EXE?

每次我们重新编译我们的 C# 应用程序时,我们最终都会得到具有不同 MD5 签名的 EXE.我们在同一台机器上重新编译,相隔几分钟.为什么相同的源代码产生不同的输出?有没有办法解决这个问题? 解决方案 "所以每个程序集都有: 时间戳,位于两个位置 与 PDB 匹配的 GUID 似乎是每次编译生成的完全随机的 GUID. 指示程序集构建的计数器 - 仅在后续 Visual Stu ..
发布时间:2021-12-27 16:37:34 C#/.NET

如何存储 CMake 构建设置

在尝试构建使用 CMake 的项目时,通常需要启用/禁用许多开关. 您如何存储某些用户所做的构建设置以使构建可在另一台机器上重现?是否有某种导出功能,或者您只是复制构建(缓存)文件夹? 解决方案 有一个选项可以预加载一个脚本,用于使用 cmake 填充缓存文件 cmake -C initial-cache 是一个包含以下方式设置的变量的文件,例如对于安装前缀: set(CMA ..
发布时间:2021-12-26 21:36:32 其他开发

为什么再次编译时二进制输出不相等?

我正在使用构建脚本来编译多个 C# 项目.二进制输出被复制到一个结果文件夹,覆盖以前版本的文件,然后添加/提交到 subversion. 我注意到,即使源代码或环境根本没有变化,编译的二进制输出也是不同的.这怎么可能?对于相同的输入,二进制结果不应该完全相等吗? 我不是有意在任何地方使用任何类型的特殊时间戳,但是编译器(Microsoft,.NET 4.0 中包含的那个)可能会自行添加 ..

Visual C ++中的二进制可再现性

是否有一种方法可以在Visual C ++中强制相同的代码生成相同的二进制文件?关闭PE中的时间戳或强制PE中的时间戳为某个固定值,换句话说? 解决方案 我想您可以编写一个实用程序来打开PE,将校验和设置为0,将时间戳设置为所需的值,重新计算crc,然后编写退出.不过,如果有一种官方的方法来确保完美的二进制再现性,那将是很好的. 有关更多信息: http://msdn.microso ..

编译两次与Delphi 6和获得相同的校验和二进制

为了二进制/源代码验证的目的,我想能够在同一台计算机上两个编译器分开两个星期,并且二进制文件是相同的,因此通过一些校验和测试。 到目前为止,我发现很可能时间戳将被编译器写入二进制。我可以通过对这个msdn文章的dumpbin / rawdata结果进行比较来解决这个问题。 http://support.microsoft.com/kb/164151 但是dumpbin的结果仍然不 ..

为什么C#为同一源代码生成不同的EXE?

每次我们重新编译我们的C#应用​​程序,我们最终得到具有不同MD5签名的EXE。我们正在同一台机器上重新编译,分开。为什么不是相同的源代码产生相同的输出?是否有办法解决这个问题? 解决方案 “所以每个程序集都有: 两个位置的时间戳记 与PDB匹配的GUID 一个用于指示程序集生成的计数器 - 只在随后的Visual Studio版本中生成。 来自: http:// ..
发布时间:2016-12-22 18:46:31 C#/.NET

为什么C#生成同样的源 - code不同的EXE文件?

每当我们编译我们的C#应用​​程序时,我们最终有不同的MD5签名EXE文件。我们除了重新编译在同一台机器上,分​​钟。为什么不一样的源 - code产生相同的输出?有没有办法来解决这个问题? 解决方案 “所以每个组件有: 时间戳,在两个位置 匹配的PDB一个GUID 什么似乎是完全随机的GUID生成的每个编译。 的计数器显示哪些组件的版本是 - 建立只产生在随后的Visual ..
发布时间:2016-08-29 13:39:12 C#/.NET

只带注释的方案而不是两个二进制文件为什么改变完全匹配GCC?

我创建了两个C程序 程序1 INT的main() { } 程序2 INT的main() { //些无伤大雅的评论 } 据我所知,编译时,编译器(GCC)应该忽略注释和冗余whitepaces,因此输出必须是相似的。 但是,当我检查了输出二进制文件的MD5SUMS,它们不匹配。我也试图与优化的编译 -O3 和 -Ofast ,但他们仍然不匹配。 这是怎么回事? 编辑: ..
发布时间:2016-08-18 21:59:31 C/C++

如何存放CMake的构建设置

有许多经常到swiches启用/禁用试图建立一个使用CMake的项目时。 你如何存储一些用户取得了令其他计算机上的构建可重复执行的构建设置?是否有某种导出功能还是你刚才复制的版本(缓存)文件夹? 解决方案 有一个选项,以pre-加载脚本使用填充缓存文件,cmake的 cmake的-C<初始缓存> 的初始缓存是包含变量以下面的方式设置,例如文件对于安装preFIX:设置 ..
发布时间:2016-08-16 12:43:37 开发过程

我可以建立一个.NET程序集时指定的模块版本ID(MVID)?

我们有一些共享程序集得到自动构建每一个夜晚。如果没有对源所做的更改,我希望大会的二进制文件是完全一样的previous版本。 然而,似乎有组件之间的微小差别。 我已经做了一些努力,以确定差异之间的两个版本。我用反汇编来产生IL版本,并比较结果文本版本。 (在伊利诺斯州)的唯一差别是在MVID(随机GUID)模块中。 一些谷歌搜索告诉我,模块版本ID获取由编译器生成的,所以它能够确定生成源,即 ..
发布时间:2015-11-26 10:47:59 C#/.NET

确定是否.NET程序集是从相同的源代码构建

有谁知道的方式来比较两个.NET程序集,以确定它们是否是从“相同的”源文件建立? 据我所知,有一些差分实用工具可用,如插件反射,但我在一个GUI观看分歧不感兴趣,我只想要一个自动化的方式来比较一组二进制文件,看看他们是否从同一个(或同等学历)的源文件编译而成。据我所知,多个不同的源文件可以产生相同的IL,实现这个过程就只能是敏感的IL差异,而不是原来的来源。 的主要障碍只是比较字节流为两个组件 ..
发布时间:2015-11-24 14:30:37 C#/.NET