Module rtti

Source
Expand description

§RTTI Structure Overview

ASCII art representing the RTTI (Run-Time Type Information) structure in C++.

  • C++ src: https://godbolt.org/z/xn5f96E9s
  • AA ref: https://www.openrce.org/articles/full_view/23
                              +------------------+
             +-------------+  | A::RTTI Complete |
+---------+  | A::vftable  |  | Object Locator   |
| class A |  |-------------|  |------------------|
|---------|  | &A_meta     |->| signature (0)    |         +-------------------------+   +-------------------------------+
| _vfptr  |->| &A::A_virt1 |  | offset (0)       |         | A::RTTI Type Descriptor |   | A::RTTI Base Class Descriptor |
| a1      |  | &A::A_virt2 |  | cdOffset (0)     |         |-------------------------|   |-------------------------------|
+---------+  +-------------+  | pTypeDescriptor  |-------->| pVFTable                |-->| pTypeDescriptor               |<-------+
                              | pClassDescriptor |---+     | spare                   |   | numContainedBases (0)         |        |
                              +------------------+   |     | name (?AVA@@)           |   | PMD where (0, -1, 0)          |        |
                                                     |     +-------------------------+   | attributes (0)                |        |
                                                     |                                   +-------------------------------+        |
                                                     |     +------------------------------------+                                 |
                                                     |     | A::RTTI Class Hierarchy Descriptor |                                 |
                                                     |     |------------------------------------|                                 |
                                                     +---->| signature (0)                      |   +--------------------------+  |
                                                           | attributes (0)                     |   | A::RTTI Base Class Array |  |
                                                           | numBaseClasses (1)                 |   |--------------------------|  |
                                                           | pBaseClassArray                    |-->| &A_BCD                   |--+
                                                           +------------------------------------+   +--------------------------+

                              +------------------+
             +-------------+  | B::RTTI Complete |
+---------+  | B::vftable  |  | Object Locator   |
| class B |  |-------------|  |------------------|
|---------|  | &B_meta     |->| signature (0)    |         +-------------------------+   +-------------------------------+
| _vfptr  |->| &B::B_virt1 |  | offset (0)       |         | B::RTTI Type Descriptor |   | B::RTTI Base Class Descriptor |
| b1      |  | &B::B_virt2 |  | cdOffset (0)     |         |-------------------------|   |-------------------------------|
| b2      |  +-------------+  | pTypeDescriptor  |-------->| pVFTable                |-->| pTypeDescriptor               |<-------+
+---------+                   | pClassDescriptor |---+     | spare                   |   | numContainedBases (0)         |        |
                              +------------------+   |     | name (?AVA@@)           |   | PMD where (0, -1, 0)          |        |
                                                     |     +-------------------------+   | attributes (0)                |        |
                                                     |                                   +-------------------------------+        |
                                                     |     +------------------------------------+                                 |
                                                     |     | B::RTTI Class Hierarchy Descriptor |                                 |
                                                     |     |------------------------------------|                                 |
                                                     +---->| signature (0)                      |   +--------------------------+  |
                                                           | attributes (0)                     |   | B::RTTI Base Class Array |  |
                                                           | numBaseClasses (1)                 |   |--------------------------|  |
                                                           | pBaseClassArray                    |-->| &B_BCD                   |--+
                                                           +------------------------------------+   +--------------------------+


                                        +----------------------+
                +------------------+    | C::RTTI Complete     |
+----------+    | C::vftable for A |    | Object Locator for A |
| class C  |    |------------------|    |----------------------|
|----------|    | &C_meta_A        |--->| signature (0)        |      +-------------------------+   +-------------------------------+
| _vfptr_A |--> | &C::A_virt1      |    | offset (0)           |      | C::RTTI Type Descriptor |   | C::RTTI Base Class Descriptor |
| a1       |    | &C::A_virt2      |    | cdOffset (0)         |      |-------------------------|   |-------------------------------|
| _vfptr_B |-+  +------------------+    | pTypeDescriptor      |----->| pVFTable                |-->| pTypeDescriptor               |
| b1       | |                          | pClassDescriptor     |--+   | spare                   |   | numContainedBases (2)         |
| b2       | |                          +----------------------+  |   | name (?AVC@@)           |   | PMD where (8, -1, 0)          |
| c1       | |                          +----------------------+  |   +-------------------------+   | attributes (0)                |
+----------+ |   +------------------+   | C::RTTI Complete     |  |                                 +-------------------------------+
             |   | C::vftable for B |   | Object Locator for B |  |
             |   |------------------|   |----------------------|  |
             +-> | &C_meta_A        |-->| signature (0)        |  |
                 | &C::A_virt1      |   | offset (8)           |  |  +----------------------+
                 | &C::A_virt2      |   | cdOffset (0)         |  |  | C::RTTI Class        |
                 +------------------+   | pTypeDescriptor      |  |  | Hierarchy Descriptor |
                                        | pClassDescriptor     |  |  |----------------------|
                                        +----------------------+  +->| signature (0)        |  +------------------------------------+
                                                                     | attributes (1)       |  | C::RTTI Base Class Array           |
                                                                     | numBaseClasses (3)   |  |------------------------------------|
                                                                     | pBaseClassArray      |->| &C_BCD -> C::RTTI Base Class Desc. |
                                                                     +----------------------+  | &A_BCD -> A::RTTI Base Class Desc. |
                                                                                               | &B_BCD -> B::RTTI Base Class Desc. |
                                                                                               +------------------------------------+

Modules§

msvc

Structs§

BaseClassDescriptor
ClassHierarchyDescriptor
CompleteObjectLocator
PMD
RVA

Enums§

Signature

Functions§

rt_dynamic_cast
RTTI Dynamic Cast function
skyrim_cast
Safety