检测二进制文件的GCC编译时标志

Detect GCC compile-time flags of a binary

本文关键字:标志 编译 GCC 二进制文件 检测      更新时间:2023-10-16

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

快速查看GCC文档不会发现任何内容。

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


(稍后添加):如果在编译代码时被要求,GCC在4.3中具有此功能:

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

实验证明:

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$

我认为这是否定的,因为二进制文件是相同的。

我是最初让Brian发布这篇文章的人。我的问题与桑巴舞二进制有关。我发现您可以运行smb -b来获取有关它是如何构建的信息。

我不这么认为。

您可以看到它是否有调试符号,这意味着使用了-g;)但我想不出如何找出哪些目录被用来搜索include头。

如果你只针对一个特定的旗帜,也许更好的答案是可能的;例如,如果您只想知道在编译该二进制文件时是否设置了标志"…"。在这种情况下,这将是什么旗帜?