!Вопрос к профессионалам!

Тема в разделе "WASM.WIN32", создана пользователем 3DManiac, 31 май 2006.

  1. 3DManiac

    3DManiac New Member

    Публикаций:
    0
    Регистрация:
    31 май 2006
    Сообщения:
    43
    Увожаемые профессионалы! Подскажите как можно вызвать функцию из dll? только без использованием GetProcAddress!

    Есть какой нибудь альтернативный вариант?
     
  2. Noble Ghost

    Noble Ghost New Member

    Публикаций:
    0
    Регистрация:
    28 апр 2004
    Сообщения:
    204
    Адрес:
    Russia
    Написать собственную реализацию GetProcAddress?
     
  3. The Svin

    The Svin New Member

    Публикаций:
    0
    Регистрация:
    6 июл 2003
    Сообщения:
    665
    Адрес:
    Russia
    "Увожаемые" эт' наверно от слова "вожжи" :)

    Можно найти по секции экспорта упомянутой dll или exe.
     
  4. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    Лезешь в импорт соответствующей dll и ищешь там адреса.



    А можно просто прилинковать к своей проге соответствующую библиотеку и никакого GetProcAddress не нужно: загрузчик сам тебе адрес предоставит.



    Пардон, естественно в экспорте, как заметил The Svin
     
  5. 3DManiac

    3DManiac New Member

    Публикаций:
    0
    Регистрация:
    31 май 2006
    Сообщения:
    43
    это наверное сложно... можно примерчик?
     
  6. 3DManiac

    3DManiac New Member

    Публикаций:
    0
    Регистрация:
    31 май 2006
    Сообщения:
    43
    в том то и дело мне нафик не нужны всякие libы
     
  7. 3DManiac

    3DManiac New Member

    Публикаций:
    0
    Регистрация:
    31 май 2006
    Сообщения:
    43
    к примеру мне нужно вызвать функцию CreateFile но без lib и GetProcAddress
     
  8. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    смотри в разделе исходников

    Kernel by Yoda

    там показано как получать адреса на примере той же GetProcAddress.

    Подставишь вместо неё свою функцию.
     
  9. 3DManiac

    3DManiac New Member

    Публикаций:
    0
    Регистрация:
    31 май 2006
    Сообщения:
    43
    тоесть прога должна



    1 вычислить адреса функций которые она будет юзать

    2 юзать эти функции
     
  10. 3DManiac

    3DManiac New Member

    Публикаций:
    0
    Регистрация:
    31 май 2006
    Сообщения:
    43
    Спасиба cresta!
     
  11. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
  12. 3DManiac

    3DManiac New Member

    Публикаций:
    0
    Регистрация:
    31 май 2006
    Сообщения:
    43
    и ещё вопросик



    вот к примеру в дельфи можно так



    1 hlib := loadlibrarya(lib);

    addr := getprocaddress(hlib, 'createfile');

    где addr адрес нашей функции



    2 а можно и так

    createfile(filename: pchar; ....): dword; external 'kernel32.dll';

    есть что нибудь подобное на асме?
     
  13. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    Код (Text):
    1. .data
    2.     hLib        dd 0
    3.     cfAddr      dd 0
    4.     szLibName   'kernel32,dll', 0
    5.     szFuncName  'CreateFile', 0
    6. .code
    7.     invoke  LoadLibrary, addr szLibName
    8.     mov     hLib, eax
    9.     invoke  GetProcAddress, hLib, addr szFuncName
    10.     mov     cfAddr, eax




    а если нужно объявление функции, то

    CreateFile PROTO :lol: WORD,:lol: WORD,:lol: WORD,:lol: WORD,:lol: WORD, :lol: WORD,:lol: WORD
     
  14. 3DManiac

    3DManiac New Member

    Публикаций:
    0
    Регистрация:
    31 май 2006
    Сообщения:
    43
    cresta мне инвоки и либы нафуй не нужны!



    просто спросил есть ли более простой способ чем ты посоветовал
     
  15. readme

    readme New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2005
    Сообщения:
    271
    Адрес:
    Russia
    проще может быть только вызывать CreateFile по стандартному адресу тока будет работать у одного тебя на компике
     
  16. 3DManiac

    3DManiac New Member

    Публикаций:
    0
    Регистрация:
    31 май 2006
    Сообщения:
    43
    readme в том то и прикол... што с переносом косяк... а во как универсал без гетпрок сделать?
     
  17. readme

    readme New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2005
    Сообщения:
    271
    Адрес:
    Russia
    3DManiac

    как с переносом сделать тебе уже ответили

    находишь адреса нужных тебе библиотек а там уж по импорту ищешь нужные тебе функции
     
  18. NullSessi0n

    NullSessi0n New Member

    Публикаций:
    0
    Регистрация:
    20 янв 2006
    Сообщения:
    322
    У меня был пример, но, как сказал Quantum, там надо ставить align, у меня пока не было времени. Короче, смотри fasm'овский PEDEMO в examples, и там перед каждой строкой типа:

    _ExitProcess dw 0

    db 'ExitProcess',0

    поставь align 2, в макросах используется та же самая структура, только всё исправлено, а в примерах автор fasm'а так и не исправил.

    Что-то ещё вроде было... не помню.

    Это пример заполнения таблицы импорта вручную без макросов и библиотек, и я им постоянно пользовался, но сейчас вынужден не программировать какое-то время.
     
  19. NullSessi0n

    NullSessi0n New Member

    Публикаций:
    0
    Регистрация:
    20 янв 2006
    Сообщения:
    322
    Это пример статического подключения, кстати.

    А по получению адресов в kernel32.dll есть статья на wasm'е "Поиск адресов api в 95-XP". В общем-то можно переделать под любую dll, если процесс вычисления базы заменить. Если ты можешь использовать GetModuleHandle проблем не будет, иначе есть ещё какие-то способы получения информации о библиотеках, использованных процессом, видел в одной статье Ms-Rem'а по обходу файрволла.
     
  20. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Мужики, кончайте метаться по 4 темам

    Знатоки масма, ответьте автору в топик Как можно вызвать функцию из dll? на простой вопрос: можно ли в масме обявить статический импорт иначе чем includelib <libname>



    А беспощадному даосу пора бы проснуться и навести порядок в этом бардачке :dntknw: