Вызов из dll внешних функций программы.

Тема в разделе "LANGS.C", создана пользователем KingT, 24 фев 2010.

  1. KingT

    KingT Member

    Публикаций:
    0
    Регистрация:
    12 янв 2006
    Сообщения:
    208
    Есть программа,которая грузит длл.Из длл необходимо вызывать функции программы, которая загрузила длл.Единственное что приходит на ум:в длл определяем указатели на функции.В программе после GetProcAddress вызываем функцию через которую передаем указатели на функции а в длл присваиваем их указателям.Это хорошее регшение?
     
  2. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    exe тоже может экспортировать функции, которые можно вызвать из dll
     
  3. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    KingT
    Хорошее решение создавать именованные переменные или функции, возвращающие ссылки на эти переменные, ибо блегчает хак(позволяет просто захватывать функции, подменять данные и пр., без дизасма).
     
  4. KingT

    KingT Member

    Публикаций:
    0
    Регистрация:
    12 янв 2006
    Сообщения:
    208
    А что такое именованные переменные?Мне ничего хакать не надо,просто в обычной программе понадобилась такая фишка.
     
  5. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    экспорт по сути заключается в сопоставлении именам указателей, которые привязаны к данному модулю. но указатель может указывать как на функцию, так и на переменную.
    под "именованными переменными" здесь понимаются указатели в списке экспорта, указывающие на секцию данных, по которым могут храниться значения переменных
    под "именованными функциями" понимается указатели в списке экспорта, указывающие на секцию кода, по которым может быть осуществлена передача управления (вызов функции).

    Код (Text):
    1. format PE GUI 5.0 DLL
    2. entry start
    3.  
    4. section '.text' code readable executable
    5. start:
    6.  mov al, [esp+8]
    7.  and al, 3
    8.  jnz @f
    9.  mov eax, [esp+4]
    10.  mov [hInstance], eax
    11. @@:
    12.  xor eax, eax
    13.  inc eax
    14.  ret 12
    15. GetModuleInstance:
    16.  mov eax, [hInstance]
    17.  ret
    18.  
    19. section '.data' data readable writeable
    20. hInstance dd 0
    21.  
    22. section '.exp' export data readable writeable
    23.   export 'dll export',\
    24.          GetModuleInstance, 'это именованная функция',\
    25.          hInstance, 'это именованная переменная'
    26.  
    27. section '.fix' fixups data readable discardable
    что-то вроде этого