NET dll, как вызвать функцию, которая не "Exported"

Тема в разделе "WASM.WIN32", создана пользователем maxrfon, 24 дек 2008.

  1. maxrfon

    maxrfon New Member

    Публикаций:
    0
    Регистрация:
    24 дек 2008
    Сообщения:
    6
    Привет бывалым!
    Есть интересная задача, у меня есть NET библиотека (COM), в ней есть всего 4 эспортных функции(DLLCanUnload, DLLRegisterServer и т.д), но как вызвать функцию, которая не перечислена в списке экспортных? То есть в нее тупо передаются несколько параметров и на выходе имеем результат. Вот кусочек кода, если поможет:
    Код (Text):
    1. .text:0526CCA0 CheckMEproc near               ; CODE XREF: LoadGenFiles+85p
    2. .text:0526CCA0
    3. .text:0526CCA0 var_20          = dword ptr -20h
    4. .text:0526CCA0 arg_0           = dword ptr  4
    5. .text:0526CCA0 arg_4           = dword ptr  8
    6. .text:0526CCA0
    7. .text:0526CCA0                 mov     ecx, [ecx+8]
    8. .text:0526CCA3                 sub     esp, 20h
    9. .text:0526CCA6                 test    ecx, ecx
    10. .text:0526CCA8                 jnz     short loc_526CCCB
    11. .text:0526CCAA                 lea     eax, [esp+20h+var_20]
    12. .text:0526CCAE                 push    (offset unk_534B3FF+0AF456B1h) ; Format
    13. .text:0526CCB3                 push    eax             ; int
    14. .text:0526CCB4                 call    sub_526C360
    15. .text:0526CCB9                 add     esp, 8
    16. .text:0526CCBC                 lea     ecx, [esp+20h+var_20]
    17. .text:0526CCC0                 push    (offset unk_5322BFF+0AF4C241h)
    18. .text:0526CCC5                 push    ecx
    19. .text:0526CCC6                 call    __CxxThrowException@8
    20. .text:0526CCCB
    21. .text:0526CCCB loc_526CCCB:                            ; CODE XREF: CheckME+8j
    22. .text:0526CCCB                 mov     eax, [esp+20h+arg_4]
    23. .text:0526CCCF                 mov     edx, [ecx]      ; Pointer to offset of cryptoroutines
    24. .text:0526CCD1                 push    eax             ; EAX = 0x0F
    25. .text:0526CCD2                 mov     eax, [esp+24h+arg_0]
    26. .text:0526CCD6                 push    eax             ; Входные данные
    27. [b].text:0526CCD7                 call    dword ptr [edx+20h] ; GeNeRaTor <- Вот эту функцию мне нужно вызвать... Но как?? [/b]
    28. .text:0526CCDA                 add     esp, 20h
    29. .text:0526CCDD                 retn    8
    Нужная мне процедура - GeNeRaTor
    Заранее спасибо.
     
  2. K10

    K10 New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2008
    Сообщения:
    1.590
    по жесткому смещению?
     
  3. maxrfon

    maxrfon New Member

    Публикаций:
    0
    Регистрация:
    24 дек 2008
    Сообщения:
    6
    Да, адреса забиты жестко.
     
  4. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    GetModuleHandle (или LoadLibrary) вернёт адрес по которому dll загрузилась, добавляй к нему своё смещение и вызывай ;) СОМ это только для "официальных" вызовов.
     
  5. maxrfon

    maxrfon New Member

    Публикаций:
    0
    Регистрация:
    24 дек 2008
    Сообщения:
    6
    Но проблема в том, что это NET, функции(GetModuleHandle и LoadLibrary) ничего не возвращают (( Я тоже так пробовал. Может я что то упустил?
     
  6. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    maxrfon
    Если функция ничего не возвращает она называется процедурой.
    Нужно знать модель вызова, а не юзоть то хз что.
     
  7. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    Функция может быть "завязана" на другие части COM объета. А раз объект не создан, то поведение функции, в лучшем случае, непредсказуемо.
     
  8. maxrfon

    maxrfon New Member

    Публикаций:
    0
    Регистрация:
    24 дек 2008
    Сообщения:
    6
    Ну это я знаю, спасибо за напоминание, но вопрос был немного не такого характера. Вопрос в том, как ее заюзать!
     
  9. maxrfon

    maxrfon New Member

    Публикаций:
    0
    Регистрация:
    24 дек 2008
    Сообщения:
    6
    Да, естественно, сначала нужно создать обьект, все это я тоже понимаю ( я не могу придумать всего лишь способ вызова из NET или пусть хотябы С++
     
  10. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    Из дот нета не получится вызвать неэкспортируемую фунцию.
     
  11. K10

    K10 New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2008
    Сообщения:
    1.590
    сделай тогда вспомогательную ДЛЛ на нормальном языке, которая будет экспортировать функцию, котороя вызывает нужную неэкспортируемую функцию из нужной ДЛЛ по смещению
     
  12. maxrfon

    maxrfon New Member

    Публикаций:
    0
    Регистрация:
    24 дек 2008
    Сообщения:
    6
    Да.. Мысль зачетная! Нужно попробовать! Спасибо !