我的意思是当 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将不包含任何内容,也无法用于反编译器应用。
目前,我认为我看到的唯一解决方案是手动将所有虚函数转换为函数指针,但这似乎是一项艰巨的工作。
我对此很感兴趣,因为它会让我更容易理解反编译的代码。至少对我来说,名字比地址好。