首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从rtti剥离类名

从rtti剥离类名
EN

Stack Overflow用户
提问于 2014-04-25 23:45:22
回答 1查看 1.4K关注 0票数 3

假设我正在编写一些C++程序,我不希望该程序如何工作的二进制泄漏信息。我知道我们可能会从二进制文件中删除符号,但是类名仍然可以通过RTTI信息存储和检索。那我怎么才能避免呢?如果我需要禁用RTTI,哪些C++功能将不再可用?

EN

回答 1

Stack Overflow用户

发布于 2014-04-26 00:01:40

禁用RTTI时所丢失的内容取决于编译器(和编译器版本)。

gcc 4.5,你可以读到:

- for禁止生成每个具有虚拟函数的类的信息,供C++运行时类型标识功能(dynamic_cast‘和type’)使用。如果您不使用该语言的这些部分,则可以使用此标志节省一些空间。注意,异常处理使用相同的信息,但它将根据需要生成它。`dynamic_cast的运算符仍然可以用于不需要运行时类型信息的强制转换,即转换为无效*或明确的基类。

用于2013:

如果编译器无法静态解析代码中的对象类型,请使用/GR。当代码使用/GR运算符或typeid时,通常需要dynamic_cast选项。但是,/GR会增加图像的.rdata部分的大小。如果您的代码不使用dynamic_cast或typeid,/GR-可能会生成一个较小的映像。

因此,实际上,在这些情况下,它只禁用dynamic_casttypeid

但是,如果目标是隐藏有关可执行文件的行为和一些信息,我不认为strip和禁用RTTI是最好的解决方案。这可能是一个好的开始,但要有真正的二进制保护,您必须看到封隔器/可执行保护/混淆工具(compression)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23304820

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档