таблица виртуальных методов

Тема в разделе "WASM.BEGINNERS", создана пользователем xmaks, 26 апр 2008.

  1. xmaks

    xmaks New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2008
    Сообщения:
    5
    Нашел случайно вот это: _http://xtin.activebb.net/forum-f2/tema-t31.htm

    Но какой смысл у делать из таблицы вирт. методов - структуру? Что это даст?

    Потом возможно у иде указать вместо call'ов "в никуда" - ссылки на эту струткуру или как? и как это сделать?
     
  2. Ustus

    Ustus New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2005
    Сообщения:
    834
    Адрес:
    Харьков
    xmaks
    Ну как что даст - вот типичный код для вызова виртуальной функции типа a->f();
    Код (Text):
    1.     mov  esi, DWORD PTR _a$[esp]
    2.     mov  eax, DWORD PTR [esi]
    3.     mov  ecx, esi
    4.     call     DWORD PTR [eax+8]
    догадаться, что невнятная восьмерка в последней строке означает именно f() иногда бывает нелегко... а так я понимаю, что автор пытается подсунуть туда имя.
     
  3. xmaks

    xmaks New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2008
    Сообщения:
    5
    Ну так а каким образом именно "подсунуть" туда имя из структуры, ну т.е. заполнил я структуру, а дальше что: как заставить Иду подставлять вместо call eax+8, call f?
     
  4. reverser

    reverser New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2004
    Сообщения:
    615
    Нажимаешь Т на строчке и выбираешь структуру. Получаешь:
    Код (Text):
    1. call     DWORD PTR [eax+IStreamVtbl.Release]
    Имхо читабельность повышается, нет?