使用条带是否删除二进制文件上的RTTI信息



当我使用带有选项的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,但我希望这是最后的手段。

但我担心RTTI的信息被其他人持有位置

是的。

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

最新更新