У IDA в окне "Names window" есть записи vtable for 'xxx:xxxx.... В конкретном местоположении, это выглядит примерно так: Код (Text): .data:xxx public ... ; weak .data:xxx ; `vtable for'... .data:xxx ... dd 2 dup(0), offset ... .data:xxx ; DATA XREF: .got:... .data:xxx dd offset ... ; ... .data:xxx dd offset ... .data:xxx dd offset ..., offset ... .data:xxx dd offset ..., offset ... .data:xxx dd offset ..., offset ... .data:xxx dd offset ..., offset ... .data:xxx dd offset ..., offset ... .data:xxx dd offset ..., offset ... .data:xxx dd offset ..., offset ... .data:xxx dd offset ..., offset ... .data:xxx dd offset ..., offset ... Сами ссылки за offset ведут на конкретные функции. Что это: я так понимаю, что это используется для какого-то хитрого вызова функций по смещению в этой таблице?
Это таблица виртуальных методов указанного класса. http://en.wikipedia.org/wiki/Vtable https://www.openrce.org/articles/full_view/23
Спасибо, сегодня займусь чтением этого. Возник такой вопрос: а как конкретно имея например какой-то такой call dword ptr [eax + 0xFF...], узнать что за функцию он вызывает из vtable? (Т.е. + 0xFF - это смещение внутри этой таблицы, я прав?)
Я наверное туплю, но не совсем понимаю, - вот у меня есть call такой со смещением по таблице, есть эта самая таблица vtable, которая в IDA получается. Как расчитать-то этот call, т.е. как по этой vtable-таблице отсчитать нужный мне вызов?