【问题标题】:Compile without extraneous information编译没有无关信息
【发布时间】:2017-07-18 19:24:38
【问题描述】:

假设我有一个简单的 C 文件。

#include <stdio.h>

int main() {
    printf("It works!\n");
    return 0;
}

如何编译 C 源代码,以使生成的二进制文件不会泄露有关我的信息? 即。编译匿名二进制文件

如果我只是使用

gcc main.c

以上来源

然后

字符串 a.out

我得到诸如

的输出

GLIBC_2.2.5

在文本编辑器中浏览a.out,我可以找到

lib64/ld-linux-x86-64.so.2

GCC:(Ubuntu 5.4.0-6ubuntu1~16.04.4)5.4.0 20160609

即使在striping a.out 之后,二进制文件中仍然有很多识别信息

编辑: 问这个问题的原因

我很年轻,希望能找到一份编程工作。

但是,我想在创建“专业”存储库之前创建一个“测试”存储库。

我知道我可以删除“测试”,但它可能会存档在某个地方 (archive.org)。

我无法创建“私人”存储库,因为它是一项付费功能

“测试”repo 将包含我已经编写的代码(但代码的风格与我现在的编码方式不同),我还想编译并将其添加到 GitHub 版本中。

“pro”repo 将包含我从现在开始编写的代码。

我不希望雇主知道作者是同一个人

【问题讨论】:

  • 为什么你想要这个?您要解决的实际问题是什么?
  • 以上信息如何识别您的身份?
  • 听起来你在做一些邪恶的事情。
  • 我不喜欢这个意图,我认为帮助 OP 实现他们的目标是不道德的。
  • @EugeneSh。请不要评判

标签: c gcc


【解决方案1】:

动态链接需要GLIBC_2.2.5/lib64/ld-linux-x86-64.so.2。您只能通过使用静态链接(在 GNU/Linux 上不推荐且几乎不支持)来摆脱这种情况。

要删除编译器标识,请使用-Qn 选项进行编译。

【讨论】:

  • -Qn 是默认值,不会删除包含“Ubuntu”的 .comment 部分。试试strip -R .comment thebinary
  • 我认为文档有误,见toplev.cflag_no_ident的处理。
  • 在一个简单的例子中,无论我使用 -Qn、-Qy 还是什么都不用,我都会得到相同的二进制文件...
  • 有趣。你的目标是什么?我在Debian和Fedora上看到.ident抑制-Qn
  • Debian 测试,使用系统 gcc 编译 int main(){}gcc m.c -Qn(或 -Qy 或无)并检查 a.out 的 md5sum。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-28
  • 1970-01-01
相关资源
最近更新 更多