Com 在IDA Pro中,是否可以将结构字段偏移到.data段中定义的vtable?
这就是我想要实现的目标。我识别了一个我定义为存储类数据的结构的类。类的其中一个方法使用类字段,就好像它是指向vtable的指针一样Com 在IDA Pro中,是否可以将结构字段偏移到.data段中定义的vtable?,com,reverse-engineering,vtable,disassembly,ida,Com,Reverse Engineering,Vtable,Disassembly,Ida,这就是我想要实现的目标。我识别了一个我定义为存储类数据的结构的类。类的其中一个方法使用类字段,就好像它是指向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->v
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调用第三个函数。在运行时,我发现vtable40194AE0指向.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,vtable40194AE0总是指向0x40194AE0处的vtable,所以在伪代码中给定的调用如下所示
return vtable_40194AE0->sub_40128EEE(v1->vtable_40194AE0, 0, 0);
?
我尝试将结构的vtable_40194AE0设置为“用户定义的偏移量”,但没有帮助:(
非常感谢!据我所知,没有。提供IDA结构只是为了简化可视化已分解数据的过程。您所能做的最多就是对调用站点进行注释,以确定正在调用的实际虚拟函数。当然,这是可能的
打开“结构”窗口,找到您的类结构(struc_4),然后打开它(如果它已折叠)。选择vtable字段(它应该位于第一位),按Y键,然后在打开的窗口中输入类型声明作为指向vtable struct的指针(vtable_40194AE0*)。就是这样。您可以创建一个表示vtable的结构,用
Y
声明其字段的C类型(要键入函数指针),并将调用[ecx+12]
中的偏移量设置为该结构的T
偏移量。这样,IDA将识别调用的参数
在表示类的结构中,将vtable字段的类型设置为指向vtable结构的指针,如果幸运的话,反编译器将把所有内容放在一起,并将vtable结构字段名放入调用中,而不是偏移量。Hi!vtable_40194AE0在我的情况下不是结构。它是结构struc_4字段的名称。