c ++类的虚拟表取决于定义的虚函数的数量。 您是否有任何想法如何在运行时获取v表大小的上限?
假设我有一个指向对象的指针,我从头文件中知道它的公共虚函数,但我不确定有多少受保护/私有虚函数。
我的一个想法是沿着vtable顺序读下来,直到:
修改
以前我在这里有一个问题:C++ COM Object Hotpatching?
我没有得到满意的答复。因此,我想到了一种自我的方式,需要破解vtable指针。
我想要做的是在运行时向c ++对象添加一个变量。虽然我唯一知道的对象是它有一个vtable指针。为了添加该字段,我计划将vtable指针指向另一个存储其vtable副本的地方。在这个新的vtable的上游,我存储了我添加的变量。这是我能想到的唯一解决方案。
包装解决方案不安全,对于COM对象,如果对象有很多接口并且调用了queryInterface,则会出现问题。
将新变量保存在地图中的想法将涉及每次访问变量时读取地图。