本文主要是介绍vs2019 - 移除PE字符串表中的RTTI字符串,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- vs2019 - 移除PE字符串表中的RTTI字符串
- 概述
- 笔记
- 显式关掉RTTI特性
- 去掉类向导生成的类中的RTTI模板代码
- DECLARE_DYNAMIC
- IMPLEMENT_DYNAMIC
- 效果
- END
vs2019 - 移除PE字符串表中的RTTI字符串
概述
用IDA打开PE, 看到字符串表中有类名的字符串。
查了源码,是用类向导建立的一个类(基类为CDialogEx),类向导生成了RTTI相关的模板代码引起的。
如果工程中不用RTTI的特性(e.g. IsKindOf(), RUNTIME_CLASS(),dynamic_cast<>()), 可以将RTTI的模板代码清掉,使生成的PE字符串表中没有类名的字符串。
RTTI特性不是必须的,自己用类的时候,自然知道是啥类,不是非要用RTTI特性。
用RTTI只是为了更方便,但是对于程序加固是不好的。
笔记
显式关掉RTTI特性
vs2019默认是不指定RTTI特性的,显式关掉,如果程序中有使用RTTI特性的代码,就会报错。
去掉类向导生成的类中的RTTI模板代码
DECLARE_DYNAMIC
这个在头文件中。
class CDlgxx : public CDialogEx
{// DECLARE_DYNAMIC(CDlgBankOrderType) // 去掉RTTI的模板代码
IMPLEMENT_DYNAMIC
这个在实现文件中。
// IMPLEMENT_DYNAMIC(CDlgBankOrderType, CDialogEx)CDlgxx::CDlgxx(CWnd* pParent /*=nullptr*/): CDialogEx(IDD_DIALOG_xx_TYPE, pParent),m_ixx(-1),m_csxx(_T(""))
{
}
效果
编译完, debug/release版的PE字符串表中,均没有类名字符串了。
END
这篇关于vs2019 - 移除PE字符串表中的RTTI字符串的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!