如何在IDA中找到V-Table?(使用班级告密者)

逆向工程 艾达 idapro插件 指针 虚表
2021-06-12 11:46:12

我已经尝试了一段时间来了解 V-Tables、V-Table 修补等,我了解 V-Tables 是什么以及为什么使用它们(至少我认为我是这样做的)。

但是我如何在 IDA 中找到它们?我使用的是 IDA Pro 7.0,我创建了一个包含两个类的测试程序。

class ClassA
{
public:
    ClassA();
    ~ClassA();
    virtual void Test();
};

和..

class ClassB : public ClassA
{
public:
    ClassB();
    ~ClassB();
    void Test() override;
};

Test在这两种情况下函数的定义对cout控制台来说都很简单

而在 main.cpp

int main()
{
    ClassB* BClass = new ClassB();
    while (1)
    {
        BClass->Test();
        Sleep(1000);
    }
    delete BClass;
    return 0;
}

我试图遵循这个解释,但在他的 IDA 版本中,数据的结构似乎不同。

单击 Class Informer 窗口中的课程后,我被带到 IDA View-A,这就是我所看到的。

在此处输入图片说明

在这一点上,我有点迷茫,因为我不确定如何在 IDA 中查找或跟踪指针。

1个回答

你所看到的实际上是一个 VTable。如您所知,VTable 是一个函数指针表,正如您所见,在 address 处0x19B64您实际上看到的是单个函数地址(这看起来像dd offset sub_XXXX)。那实际上是一个大小为 1 的虚函数表。由于您的演示类中只有一个虚函数。该偏移量指向Test. 双击函数名称(默认为函数的地址前缀,sub_表示它是一个子例程)将设置光标它的地址(并使其可见)。

在它的下方,在 address 处0x19B8C,您可以看到第二个类的 vtable,因为您有两个具有不同功能的类。该偏移量是的第二个实现Test