Возможно ли в IDA Pro сделать смещение поля структуры в vtable, которое определено в сегменте .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 всегда указывает на vtable по адресу 0x40194AE0, поэтому данный вызов в псевдокоде будет выглядеть как

return vtable_40194AE0->sub_40128EEE(v1->vtable_40194AE0, 0, 0);

?

Я пытался установить vtable_40194AE0 структуры как «определяемое пользователем смещение», но это не помогло: (

Большое спасибо!

5
задан expert 9 May 2011 в 02:03
поделиться