vtable

Тема в разделе "WASM.BEGINNERS", создана пользователем FFx0, 10 дек 2007.

  1. FFx0

    FFx0 New Member

    Публикаций:
    0
    Регистрация:
    10 дек 2007
    Сообщения:
    4
    У IDA в окне "Names window" есть записи vtable for 'xxx:xxxx....
    В конкретном местоположении, это выглядит примерно так:
    Код (Text):
    1. .data:xxx                 public ... ; weak
    2. .data:xxx ; `vtable for'...
    3. .data:xxx ... dd 2 dup(0), offset ...
    4. .data:xxx                                         ; DATA XREF: .got:...
    5. .data:xxx                 dd offset ... ; ...
    6. .data:xxx                 dd offset ...
    7. .data:xxx                 dd offset ..., offset ...
    8. .data:xxx                 dd offset ..., offset ...
    9. .data:xxx                 dd offset ..., offset ...
    10. .data:xxx                 dd offset ..., offset ...
    11. .data:xxx                 dd offset ..., offset ...
    12. .data:xxx                 dd offset ..., offset ...
    13. .data:xxx                 dd offset ..., offset ...
    14. .data:xxx                 dd offset ..., offset ...
    15. .data:xxx                 dd offset ..., offset ...
    Сами ссылки за offset ведут на конкретные функции.
    Что это: я так понимаю, что это используется для какого-то хитрого вызова функций по смещению в этой таблице?
     
  2. reverser

    reverser New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2004
    Сообщения:
    615
    Это таблица виртуальных методов указанного класса.
    http://en.wikipedia.org/wiki/Vtable
    https://www.openrce.org/articles/full_view/23
     
  3. FFx0

    FFx0 New Member

    Публикаций:
    0
    Регистрация:
    10 дек 2007
    Сообщения:
    4
    Спасибо, сегодня займусь чтением этого. Возник такой вопрос: а как конкретно имея например какой-то такой call dword ptr [eax + 0xFF...], узнать что за функцию он вызывает из vtable? (Т.е. + 0xFF - это смещение внутри этой таблицы, я прав?)
     
  4. Rustem

    Rustem New Member

    Публикаций:
    0
    Регистрация:
    8 мар 2004
    Сообщения:
    429
    Адрес:
    Russia
    FFx0
    Да, смещение относительно адреса начала таблицы
     
  5. FFx0

    FFx0 New Member

    Публикаций:
    0
    Регистрация:
    10 дек 2007
    Сообщения:
    4
    Я наверное туплю, но не совсем понимаю, - вот у меня есть call такой со смещением по таблице, есть эта самая таблица vtable, которая в IDA получается. Как расчитать-то этот call, т.е. как по этой vtable-таблице отсчитать нужный мне вызов?
     
  6. Rustem

    Rustem New Member

    Публикаций:
    0
    Регистрация:
    8 мар 2004
    Сообщения:
    429
    Адрес:
    Russia
    Для 32 битных систем:

    смещение в таблице=4*номер функции