任何反编译虚函数实例的简单方法?

逆向工程 艾达 C++ 六线谱 虚函数
2021-06-23 00:07:58

我的意思是当 Hex-Rays 编译器给我这样的东西时:

int v1;


CreateSomeInterface(&v1);

(*(int (__thiscall **)(int))(*(_DWORD *)v1 + 4))(0);

我有一个 C++ 头文件,其接口定义如下:

struct SomeInterface
{
    virtual void func1() = 0;
    virtual void func2() = 0;
} ;

而且我知道 VT 的结构非常简单(它是所有 Windows 界面的标准布局 - 所有虚拟函数指针都由第一个结构成员按顺序存储在内存位置指针中),例如:

地点*(void **)this

struct _SomeInterfaceLayOut
{
        void (*func1)();
        void (*func2)();
} ;

有没有一些简单直接的方法来设置类型v1目前,如果我使用虚函数声明解析 C++ 头文件,则创建的本地类型SomeInterface将不包含任何内容,也无法用于反编译器应用。

目前,我认为我看到的唯一解决方案是手动将所有虚函数转换为函数指针,但这似乎是一项艰巨的工作。

我对此很感兴趣,因为它会让我更容易理解反编译的代码。至少对我来说,名字比地址好。

1个回答

如果我理解正确,您已经定义了接口,因此您可以创建一个结构,其中所有字段都具有函数名称(或者,如果您的头文件足够简单,甚至可以导入它),然后定义类型您的变量到此结构(编辑-> 设置类型,或“ Y ”)。这样,“v1+4”将显示为“yourStructName.func2”。