如何使用 g++ 生成确定性二进制输出?

2024-01-16

我在一个非常受监管的环境中工作,我们需要能够生成相同的二进制输入,每次构建产品时都给出相同的源代码。我们目前使用的是旧版本的 g++,该版本已被修补,不会在生成的二进制文件中写入日期/时间之类的内容,这些内容会因构建而异,但我想更新到 g++ 4.7.2。有谁知道补丁,或者对我需要寻找什么来获取两个相同的源代码并生成相同的二进制输出有建议?


Debian可重现的构建项目 https://wiki.debian.org/ReproducibleBuilds尝试逐字节标准化 Debian 软件包,并收到了2016 年 Linux 基金会资助 http://web.archive.org/web/20190723155526/https://www.linuxfoundation.org/press-release/2016/11/the-linux-foundations-core-infrastructure-initiative-renews-funding-for-reproducible-builds-project/.

虽然这可能不仅仅包括编译,但您应该看一下它。

这也向我指出本文 http://blog.mindfab.net/2013/12/on-way-to-deterministic-binariy-gcc.html,它在 @Employed 所说的基础上添加了以下几点:

  • 将源代码放在固定文件夹中(例如/tmp/build)来处理__FILE__
  • for __DATE__, __TIME__, __TIMESTAMP__:
    • libfaketime:https://github.com/wolfcw/libfaketime https://github.com/wolfcw/libfaketime
    • 覆盖这些宏-D
    • -Wdate-time or -Werror=date-time:如果出现以下任一情况,则发出警告或失败__TIME__, __DATE__ or __TIMESTAMP__被使用。 Linux内核4.4默认使用它。
  • use the D标志与ar,或使用https://github.com/nh2/ar-timestamp-wiper/tree/master https://github.com/nh2/ar-timestamp-wiper/tree/master擦拭邮票
  • -fno-guess-branch-probability: 较旧的手动版本 https://gcc.gnu.org/onlinedocs/gcc-3.3.1/gcc/Optimize-Options.html说这是非决定论的根源,但是不再 https://gcc.gnu.org/onlinedocs/gcc-5.4.0/gcc/Optimize-Options.html#Optimize-Options。不确定这是否涵盖在-frandom-seed or not.

构建根 https://buildroot.org/ has a BR2_REPRODUCIBLE选项可能会在包级别上提供一些想法,但目前还远未完成。

相关主题:

  • https://superuser.com/questions/639351/does-recompiling-a-program- Produce-a-bit-for-bit-identical-binary https://superuser.com/questions/639351/does-recompiling-a-program-produce-a-bit-for-bit-identical-binary
  • https://www.quora.com/What-c​​an-be-the-possible-reasons-for-the-object-code-of-an-unchanged-C-file-to-change-on-recompilation https://www.quora.com/What-can-be-the-possible-reasons-for-the-object-code-of-an-unchanged-C-file-to-change-on-recompilation
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 g++ 生成确定性二进制输出? 的相关文章

随机推荐

  • 我们需要手动启动Appium的Android模拟器吗?

    我是 appium 新手 我正在使用以下代码运行计算器示例测试 DesiredCapabilities capabilities new DesiredCapabilities capabilities setCapability devi
  • 如何在 Spark DataFrame/DataSet 中将行拆分为不同的列?

    假设我有如下数据集 Name Subject Y1 Y2 A math 1998 2000 B 1996 1999 science 2004 2005 我想分割该数据集的行 以便消除 Y2 列 如下所示 Name Subject Y1 A
  • ggplot 使用小饼图作为点与 geom_point

    我想用 ggplot 制作一个图表 如下所示 这个想法是绘制两个分类变量之间的 百分比匹配 通过改变点的大小很容易接近 但我想知道是否可以制作这些小饼图 用于绘制此图的示例代码 并使用点的大小作为分数的度量 temp lt data fra
  • 如何跟踪 Git 中共享公共代码的多个项目?

    我开发了一个网站 现在必须为几个客户克隆该网站 每个客户都希望进行超出视觉方面的定制 并且不能通过配置文件 偏好或类似的东西来处理 在这种情况下 我想在 Git 中使用公共代码维护一个主存储库 然后为每个客户端维护一个分支 这样 我可以在每
  • 如何使用 PHP Curl 模拟启用 JavaScript?

    我想使用 PHP Curl 解析网页中的 HTML 代码 但有一条错误消息 表明我无法在没有 JavaScript 的情况下访问该网站 我可以使用 PHP Curl 启用 JavaScript 吗 JavaScript由浏览器执行 cURL
  • 未捕获的类型错误:_this2.props.selectBook 不是函数

    我是 ReactJS 的新手 正在学习 udemy 上的 React 基础课程 我的控制台日志上出现以下错误 有人可以帮助我吗 bundle js 21818 Uncaught TypeError this2 props selectBoo
  • 如何在启动时启用“填充列指示器”

    我在 OS X 10 9 4 上使用 Aquamacs 我的中有以下几行Preferences el文件 这类似于 emacs初始化文件 add to list load path emacs d require fill column i
  • 禁用上下文 LOB 创建,因为 createClob() 方法引发错误

    我正在使用 Hibernate 3 5 6 和 Oracle 10g 我在初始化期间看到以下异常 但应用程序本身工作正常 出现这个异常的原因是什么 以及如何纠正 例外禁用上下文 LOB 创建createClob 方法抛出错误 java la
  • Sparksql.sql.codegen 没有提供任何改进

    我正在 Spark sql 中执行查询 如下所示 表的数据存储在 Hive 表的 2 个不同节点中 但由于查询有点慢 我尝试在 Spark 中找到一些选项 以便查询可以执行得更快 所以我发现我们可以配置sparksql sql codege
  • JFrame尺寸太小

    我在netbeans中创建了一个JFrame 但是当我运行该程序时 Jframe 尺寸太小 这是我的代码 import javax swing JFrame public class Window private static void d
  • 如何计算 OLAP 多维数据集的可能大小

    有谁知道一种用于获取基于星型模式数据仓库的 OLAP 多维数据集的粗略大小的方法 基于维度的数量 维度表中的记录数量和事实记录的数量 最后是聚合或不同记录的数量等 我正在查看的数据库有一个超过 200 亿行的事实表和一些包含 2000 万
  • 在VBA中使用VLookup引用另一个Excel文件

    我正在尝试在 VBA 中编写一个引用另一个文件的 VLookup 表 这是我的目标的简单概述 在另一个 Excel 文件中查找单元格 A2 中的值 从另一个 Excel 文件的第 2 列中提取信息并将其放入单元格 B2 中 移至单元格 A3
  • 将 ActiveMQ Artemis 7.4 与 Weblogic 12.x 桥接时出现“无效代理 URL”错误

    我正在尝试在 Oracle 12 x 和 Redhat ActiveMQ Artemis 7 4 之间创建桥梁 这是建立桥的过程 将 artemis jms client all 2 9 0 redhat 00005 jar 设置为 WL
  • 为什么我在 Rails 中使用“net/http”时会收到“Errno::ECONNREFUSED”?

    我正在尝试从 URL 解析 XML 文件 当我尝试这样的事情时 require net http require rubygems require xmlsimple url http my address com xmltest note
  • ASP.NET MVC 使用相同的控制器分离移动视图

    我正在开发一个使用 ASP NET MVC 3 w Razor 的新项目 并开发同一网站的 2 个不同视图 完整版本和移动版本 使用相同控制器但根据用户代理显示不同视图的最佳实践 方法是什么 我应该在控制器中处理这个问题吗 在每个控制器操作
  • 无法更改 Material-UI OutlinedInput 的边框颜色

    我正在尝试更改 v4 13 的边框颜色Material UI 概述输入 https material ui com api outlined input outlinedinput api 然而 当我尝试覆盖 CSS 时 我没有得到任何东西
  • 我可以知道用户何时删除我的应用程序吗?

    我想知道是否可以通过事件或某种方式知道用户何时删除我的应用程序 以便我可以将他从我的数据库中删除 是否可以 第一的 仅仅因为用户在一台设备上删除了该应用程序 并不意味着他们没有在其他设备上安装该应用程序 或者不会在其他设备上安装该应用程序
  • Microsoft graph 无法读取 JSON 请求负载

    我正在尝试在 php 中使用 microsoft graph 创建订阅 但是我目前无法看到出了什么问题 该代码在以下位置被破坏 protected http subscribe https graph microsoft com v1 0
  • Marshal.SizeOf 和 sizeof 之间的区别,我只是不明白

    到目前为止 我一直认为 Marshal SizeOf 是计算非托管堆上 blittable 结构的内存大小的正确方法 这似乎是 SO 以及网络上几乎所有其他地方的共识 但在阅读了一些针对 Marshal SizeOf 的警告之后 本文 ht
  • 如何使用 g++ 生成确定性二进制输出?

    我在一个非常受监管的环境中工作 我们需要能够生成相同的二进制输入 每次构建产品时都给出相同的源代码 我们目前使用的是旧版本的 g 该版本已被修补 不会在生成的二进制文件中写入日期 时间之类的内容 这些内容会因构建而异 但我想更新到 g 4