c++ - 程序中的编译器信息

标签 c++ compiler-construction

是的,我想知道该程序包含哪些有关编译它的编译器的信息。 编译器名称,版本等信息。这通常在帮助(程序如Vlc)菜单的关于框中提到,但我的问题是编译器是否向.exe写入任何东西。

我问这个的原因是通过在任何反汇编程序(IDA,OLLY)中反汇编程序来获取有关编译器的信息。

最佳答案

由于您特别提到了 VLC,因此播放器是通过以下方式进行的:在 configure 中的 50935 行(至少在我的 VLC 源包中是 2.1.4) 脚本有如下语句:

cat >>confdefs.h <<_ACEOF
#define VLC_COMPILER "`$CC -v 2>&1 | tail -n 1 | sed -e 's/ *$//'`"
_ACEOF

如您所见,它使用编译器的版本更新了 confdefs.h 文件。实际上,如果您执行语句:

$ gcc -v 2>&1 | tail -n 1 | sed -e 's/ *$//'
gcc version 4.8.2 (Ubuntu 4.8.2-19ubuntu1)

稍后,此 confdefs.h 被“注入(inject)”到 config.h 中,并且该行将是 683(仅对我和我的编译而言,这对您来说可能有所不同,但您需要注意VLC_COMPILER)

/* compiler */
#define VLC_COMPILER "gcc version 4.8.2 (Ubuntu 4.8.2-19ubuntu1)"

当 VLC 想要打印出编译器时,它只是打印这个字符串(在 version.c 中定义了返回这个字符串的 VLC_Compiler() 方法。

最后回答你的问题:我记得有些(旧的)版本的 Borland 编译器 (Turbo C) 注入(inject)了版权信息,但是我在任何最近的编译器中都没有遇到过这种情况,但这并不意味着它们不要。这是特定于编译器的,没有任何东西可以使它们或阻止它们这样做。在最坏的情况下,您总是可以通过(十六进制)查看器查看二进制文件以查看任何有趣的内容...

关于c++ - 程序中的编译器信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23269402/

相关文章:

iPhone程序崩溃和编译器显示的堆栈报告完全没有用!

c# - Visual Studio 2010基于目标框架的编译条件

javascript - 每个浏览器如何公开 JavaScript 的中间表示?

c++ - 如何从派生类访问基类中的 vector ?

c++ - 错误 LNK2020 : unresolved token (06000002) in Visual C++

c++ - 制作一个像流一样的 C++ 宏

c# - 预编译 ASP.NET 2.0 站点上出现编译错误 CS0433

c++ - 将 char 存储到指针值中时出现运行时错误

c++ - 优先函数

optimization - Clang vs GCC - 哪个产生更快的二进制文件?