程序中的编译器信息

时间:2014-04-24 12:49:25

标签: c++ compiler-construction

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

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

1 个答案:

答案 0 :(得分:0)

由于您特别提到了VLC,因此播放器按以下方式执行此操作:50935脚本中的configure行(至少在我的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被“注入”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)的一些(较旧)版本注入了版权信息,但是我没有在最近的编译器中遇到过这种情况,但这并不意味着他们不要。这是特定于编译器的,没有任何东西可以使它们或阻止它们这样做。在最坏的情况下,你总是可以通过(十六进制)查看器查看二进制文件以查看任何有趣的内容......