在运行时查找vtable大小的上限

时间:2013-03-02 06:36:32

标签: c++ runtime vtable

c ++类的虚拟表取决于定义的虚函数的数量。 您是否有任何想法如何在运行时获取v表大小的上限?

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

我的一个想法是沿着vtable顺序读下来,直到:

  1. 我有访问权限违规,那么这可以是vtable大小的上限。
  2. 它是NULL(但NULL也可以是纯虚函数)。
  3. 修改

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

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

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

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

    将新变量保存在地图中的想法将涉及每次访问变量时读取地图。

0 个答案:

没有答案