Как узнать смещение по которому находится функция в vtable?

Тема в разделе "WASM.BEGINNERS", создана пользователем protoman, 6 окт 2006.

  1. protoman

    protoman New Member

    Публикаций:
    0
    Регистрация:
    12 сен 2006
    Сообщения:
    6
    Всем привет!

    Собственно сабж. помогите решить эту задачу.

    скажем я определяю интерфейсы

    IShellWindows STRUCT DWORD
    IShellWindows_QueryInterface comethod3 ?
    IShellWindows_Release comethod1 ?
    IShellWindows_Invoke comethod9 ?
    IShellWindows_GetCount comethod2 ?
    IShellWindows ENDS


    как узнать по какому смещению находятся функции в виртуальной таблице?

    чтобы впоследствии можно было вызвать:

    ...
    ppd2 указатель определен
    mov edx,dword ptr [ppd2]
    mov edx,[edx]
    lea eax,tit
    push eax
    push dword ptr [ppd2]
    call dword ptr [edx+XXXXXXXXXX] ;IShellWindows->GetCount

    ..

    вот каким образом определить XXXXXXX ??

    Ответьте или намекните где копать.. спасибо
     
  2. protoman

    protoman New Member

    Публикаций:
    0
    Регистрация:
    12 сен 2006
    Сообщения:
    6
    Просто вызывая функцию через coinvoke не работает, хотелось бы все-таки узнать про смещения, как их правильно определить или создать самому
     
  3. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Ну размер каждого метода = sizeof(void *).
    Вот и считай.
    Про COM неплохо написано http://wasm.ru/article.php?article=1015001. Там как раз и найдешь про vtable.
    И вот тут: http://wasm.ru/article.php?article=1015003
     
  4. reverser

    reverser New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2004
    Сообщения:
    615
    Исправь на
    Код (Text):
    1. call dword ptr [edx+IShellWindows.IShellWindows_GetCount]
    и всё должно заработать.
    P.S. У тебя кстати AddRef пропущен (после QueryInterface).
     
  5. protoman

    protoman New Member

    Публикаций:
    0
    Регистрация:
    12 сен 2006
    Сообщения:
    6
    всем огромное спасибо! :) разобрался с vtable со смещениями функций, теперь пишу только в путь )