C++ 程序的 RTTI
- RTTI 全称
Run-Time Type Identification
,译为“运行时类型信息”
- RTTI 提供如下两个非常有用的操作符:
- typeid 操作符:返回指针的引用所指的实际类型
- dynamic_cast 操作符:将基类类型的指针或引用安全地转换为派生类类型地指针或引用
- 若 C++ 程序中用了 C++ 对象的多态特性(如用 typeid 获取类名,用 dynamic_cast 对类进行动态转换),程序中就会包含 RTTI。包含 RTTI 的程序会在二进制代码中以特定的格式保存 RTTI 信息,这些信息对逆向分析很有帮助
- 实例:app9.cpp
#include <iostream>
#include <string>
#include <typeinfo>
class Person
{
public:
Person()
{
age = 31;
printf("Person: Person() called\n");
}
virtual ~Person()
{
printf("Person: ~Person() called\n");
}
virtual int getAge()
{
return age;
}
virtual void setAge(int age_)
{
age = age_;
}
private:
int age;
};
class Student: public