程序中的编译器信息
Compiler information in Program
是的,我想知道这个程序包含哪些关于编译它的编译器的信息。编译器名称、版本等信息。这通常在帮助框(像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被"注入"到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)的一些(旧)版本注入了版权信息,但我在最近的任何编译器中都没有经历过这种情况,但这并不意味着它们没有。这是编译器特有的,没有任何东西可以让他们或阻止他们这样做。在最坏的情况下,你总是可以通过(十六进制)查看器查看二进制文件,以查看任何有趣的内容。。。
相关文章:
- 正在查找文档以获得PS4平台的C++中的设备信息
- Qt中的包装连接方法隐藏了编译器所需的信息
- 在Bazel中显示编译器信息
- 编译器在遇到提取或插入运算符时处理信息(字符串、操纵器等)的顺序是什么?
- C++在编译器错误中缺少信息
- 编译器不可知的运行时类型信息
- 编译器如何以及在内存中的何处存储有关变量类型的信息
- 这个关于类模板中静态信息的编译器错误意味着什么
- 告诉编译器不要为标准库生成调试信息
- 编译器是否可以基于命名空间生成调试信息
- 如何将范围信息传递给c++编译器
- 如何在MSBuild中定制c++编译器错误信息
- 为什么sun C++编译器在使用调试信息进行编译时会更改符号名称
- 为什么编译器在编译期间不评估 constexpr 函数,当每个信息都给出时?
- 我可以向编译器查询有关 C++0x "alignas"支持的信息吗?
- 程序中的编译器信息
- 如何在linux中查看.o文件的信息和编译器标志
- 视觉 C++标准是否指定编译器的 STL 实现详细信息
- 编译器对此指针和虚函数的详细信息
- 编译器对此指针、虚函数和多重继承的详细信息