这是我想要实现的目标。我确定了一个类,我将其定义为存储类数据的结构。该类的方法之一使用类字段,就好像它是指向 vtable 的指针。
int __thiscall SignOn(struc_4 *this)
{
v1 = this;
if ( !v1->vtable_40194AE0 )
return E_UNEXPECTED;
v1->field_3E8 = 0;
if ( !sub_686F7193(v1) )
return (*(*v1->vtable_40194AE0 + 12))(v1->vtable_40194AE0, 0, 0); // sub_40128EEE
}
如您所见,它从 vtable 调用第三个函数。在运行时,我发现 vtable_40194AE0 指向 .data 部分中的数组,如下所示
off_40194AE0 dd offset InternalQueryInterface
dd offset AddRef
dd offset Release
dd offset sub_40128EEE ; 3
dd offset sub_40128F8C
dd offset sub_4012C2E2 ; 5
有没有办法以某种方式告诉 IDA vtable_40194AE0 总是指向 0x40194AE0 处的 vtable 所以给定的伪代码调用看起来像
return vtable_40194AE0->sub_40128EEE(v1->vtable_40194AE0, 0, 0);
?
我试图将结构的 vtable_40194AE0 设置为“用户定义的偏移量”,但它没有帮助:(
非常感谢 !