【发布时间】:2011-08-21 08:47:40
【问题描述】:
这就是我想要实现的目标。我确定了一个类,我将其定义为存储类数据的结构。该类的方法之一使用类字段,就好像它是指向 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 设置为“用户定义的偏移量”,但没有帮助:(
非常感谢!
【问题讨论】:
标签: com reverse-engineering vtable disassembly ida