This is what I want to achieve. I defined a class that I defined as a struct for storing class data. One of the class methods uses the class class as if it were pointing to a 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);
As you can see, it calls the 3rd function from vtable. At runtime, I determined that vtable_40194AE0 points to an array in the .data section, which looks like this:
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
Is there any way to tell IDA in some way that vtable_40194AE0 always points to vtable at 0x40194AE0, so this call in pseudo-code will look like
return vtable_40194AE0->sub_40128EEE(v1->vtable_40194AE0, 0, 0);
?
I tried to set vtable_40194AE0 of the structure as "user offset", but this does not help :(
Thanks a lot!
source share