Вопрос IDA расшифровка виртуальных вызовов

Пользователь
Статус
Оффлайн
Регистрация
6 Янв 2020
Сообщения
91
Реакции[?]
36
Поинты[?]
0
Возможно ли заставить IDA расшифровывать вызовы виртуальных методов в декомпилированных функциях ссылаясь на виртуальные таблицы из БД?
Следуя великой
Пожалуйста, авторизуйтесь для просмотра ссылки.
я создал нужные классы в Local Types:
Код:
struct /*VFT*/ CEconItem_vtbl // sizeof=0x0 {};
struct __cppobj CEconItem // sizeof=0x8
{
    CEconItem_vtbl *__vftable;
};
И слинковал ordinal с ea_t виртуальной таблицы:
Код:
>>> ordinal = idaapi.get_type_ordinal(None, "CEconItem_vtbl")
>>> idaapi.set_vftable_ea(ordinal, 0x3586780)
>>> True
Но максимум что выдает IDA:
Код:
(*((unsigned int (__fastcall **)(CEconItem *))a4->__vftable + 2))(a4)
А так хотелось бы увидеть красивое:
Код:
a4->sub_137C670(a4)
Разумеется, если наполнить CEconItem_vtbl методами самому, IDA раздуплится, но постоянно заполнять и менять виртуальные таблицы в структурах это нереальный труд.
Буду рад если у кого-то есть решение.
 
Кот на арбузе
Пользователь
Статус
Оффлайн
Регистрация
27 Окт 2019
Сообщения
326
Реакции[?]
107
Поинты[?]
73K
Код:
(*((unsigned int (__fastcall **)(CEconItem *))a4->__vftable + 2))(a4)
Вообще чисто теоретически можно было в тупую изменить тип a4 на CEconItem* и оно показало бы то что ты хотел, хотя может я не понял чего ты хотел
 
Пользователь
Статус
Оффлайн
Регистрация
6 Янв 2020
Сообщения
91
Реакции[?]
36
Поинты[?]
0
Вообще чисто теоретически можно было в тупую изменить тип a4 на CEconItem* и оно показало бы то что ты хотел, хотя может я не понял чего ты хотел
В общем-то я так и делаю, в сигнатуре функции a4 помечена как ..., CEconItem *a4, ...
 
Сверху Снизу