c++ - 使用 strip 会删除二进制文件上的 RTTI 信息吗?

标签 c++ gcc obfuscation rtti strip

当我使用带有保留符号信息选项的 gcc 编译 C++ 二进制文件时,当我运行以下命令时,它会列出类的类型信息

objdump -Ct ExecName | grep typeinfo

当我使用剥离选项 -s 编译并运行以下命令时,它说没有符号。

但我担心 RTTI 信息被保存在其他地方。

我希望所有类名都不要显示在二进制文件中。我想确认剥离符号是否最终会删除 RTTI 信息。

在 Blackhat 的这个演示中,他们展示了如何使用 RTTI 来了解二进制文件。 http://www.blackhat.com/presentations/bh-dc-07/Sabanal_Yason/Paper/bh-dc-07-Sabanal_Yason-WP.pdf

我知道您可以在编译时使用 -fno-rtti 关闭 RTTI,但我希望这是最后的手段。

最佳答案

But I am worried the RTTI information is being held in some other place.

是的。

当我要求编译器执行dynamic_cast 时,它必须遵守dynamic_cast 的约定,而这需要RTTI。避免这种情况的唯一方法是拥有一个编译器设置,当您尝试以这种方式使用 dynamic_cast 时,它会给出错误或 UB。编译器有义务按语言提供 RTTI,除非您明确告诉它其他方式。

关于c++ - 使用 strip 会删除二进制文件上的 RTTI 信息吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17923042/

相关文章:

c++ - 打开CV : Acces pixels of grayscale image

c++ - 我应该使用什么 IDE 来试验 Chromium 源代码

c++ - OpenCV 内置调试​​或 Release模式?

macos - 链接器 stub 文件警告

c++ - 减少g++ RAM使用

c++ - block 级原子写入

c++ - 为什么可以在g++(gcc)中重新定义gnulib?

javascript - 是否有免费/开源的 JavaScript 到 JavaScript 压缩编译器(如 Google 的)?

javascript - 混淆 Javascript 代码的先决条件?

Java & Tomcat : Severe Error starting obfuscated app w/hibernate inside