假设我正在编写某些C++程序,但我不希望该程序的运行方式出现二进制泄漏信息。我知道我们可以从二进制中删除符号,但是类名称仍然可以通过RTTI信息存储和检索。那么我该如何避免呢?如果我需要禁用RTTI,哪些C++功能将不再可用?
最佳答案
禁用RTTI时丢失的内容取决于您的编译器(和编译器版本)。
对于gcc 4.5,您可以阅读:
对于Visual Studio 2013:
因此,实际上,在这些情况下,它仅禁用dynamic_cast
和typeid
。
但是,如果目标是隐藏行为和有关可执行文件的某些信息,则我认为strip
和禁用RTTI并不是最佳解决方案。这可能是一个好的开始,但是要拥有真正的二进制保护,您必须看到打包程序/可执行文件保护程序/混淆工具(http://en.wikipedia.org/wiki/Executable_compression)。
关于c++ - 从rtti剥离类别名称,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23304820/