這是我想要實現的。我確定了一個我定義爲一個結構來存儲類數據的類。該類的其中一個方法使用class-field,就像它指向vtable的指針一樣。IDA Pro中有可能爲.data段中定義的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是「用戶自定義的偏移」,但它並不能幫助:(
非常感謝!
嗨! vtable_40194AE0在我的情況下不是一個結構。它是結構struc_4的一個字段的名稱。 – expert 2012-08-09 01:12:41