4

c++ 类的虚表取决于定义的虚函数的数量。您有什么想法如何在运行时获得 v-table 大小的上限?

假设我有一个指向对象的指针,我从头文件中知道它的公共虚函数,但我不确定有多少受保护/私有的虚函数。

我的一个想法是沿着 vtable 依次向下阅读,直到:

  1. 我有访问冲突,那么这可能是 vtable 大小的上限。
  2. 它是 NULL(但 NULL 也可以是纯虚函数)。

编辑:

以前我在这里有一个问题:C++ COM Object Hotpatching?

我没有得到满意的答复。因此,我想到了一种我自己的方法,它需要破解 vtable 指针。

我想要做的是在运行时向 c++ 对象添加一个变量。虽然我对这个对象唯一了解的是它有一个 vtable 指针。为了添加该字段,我计划将 vtable 指针指向另一个存储其 vtable 副本的位置。在这个新 vtable 的上游,我存储了我添加的变量。这是我能想到的唯一解决方案。

包装解决方案是不安全的,因为对于 COM 对象,如果对象有很多接口并且调用 queryInterface 就会出现问题。

并且将新变量保留在映射中的想法将涉及每次访问变量时读取映射。

4

0 回答 0