【问题标题】:Detect GCC compile-time flags of a binary检测二进制文件的 GCC 编译时标志
【发布时间】:2010-09-16 09:41:33
【问题描述】:

有没有办法找出特定二进制文件编译时使用的 gcc 标志?

【问题讨论】:

    标签: c++ c gcc


    【解决方案1】:

    快速浏览 GCC 文档并没有发现任何问题。

    Boost 开发人员是一些最聪明的 C++ 开发人员,他们将resort 命名为conventions,因为这通常是不可能的(可执行文件可以用任何数量的语言创建,任何毕竟编译器版本的数量)。


    (后来添加):Turns out GCC has this feature in 4.3 if asked for when you compile the code:

    一个新的命令行开关 -frecord-gcc-switches ... 导致用于调用编译器的命令行被记录到正在创建的目标文件中。此录音的确切格式取决于目标和二进制文件格式,但通常采用包含 ASCII 文本的注释部分的形式。

    【讨论】:

      【解决方案2】:

      实验证明:

      diciu$ gcc -O2 /tmp/tt.c -o /tmp/a.out.o2
      diciu$ gcc -O3 /tmp/tt.c -o /tmp/a.out.o3
      diciu$ diff /tmp/a.out.o3 /tmp/a.out.o2 
      diciu$
      

      我认为这是一个不,因为二进制文件是相同的。

      【讨论】:

      • 如果你没有源代码就不行
      • @xuhdev 您可以使用 O3 不提供任何额外优化的任何简单代码进行实验。
      【解决方案3】:

      我是最初要求 Brian 发布此内容的人。我的问题与 samba 二进制文件有关。我发现您可以运行 smb -b 来获取有关它是如何构建的信息。

      【讨论】:

        【解决方案4】:

        我不这么认为。

        您可以查看它是否有调试符号,这意味着使用了 -g ;) 但我想不出任何方法可以找出哪些目录已用于搜索包含标题。

        如果您只针对特定标志,也许会有更好的答案;例如如果您只想知道在编译此二进制文件时是否设置了标志“...”。那么,这将是什么标志?

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-04-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-12-03
          • 1970-01-01
          • 1970-01-01
          • 2019-10-29
          相关资源
          最近更新 更多