Уроки Iczelion'а



         

Урок 17. Динамические библиотеки - часть 4


  • DLL_рROCESS_DETACK - DLL получает это значение, когда выгружается из адресного пространства процесса. Вы можете использовать эту возможность для того, чтобы "почистить" за собой: освободить память и так далее.
  • DLL_THREAD_ATTACK - DLL получает это значение, когда процесс создает новую ветвь.
  • DLL_THREAD_DETACK - DLL получает это значение, когда ветвь в процессе уничтожена.
  • Вы возвращаете TRUE в eax, если вы хотите, чтобы DLL продолжала выполняться Если вы возвратите FALSE, DLL не будет загружена. Hапример, если ваш инициализационный код должен зарезервировать память и он не может это сделать, стартовой функции следует возвратить FALSE, чтобы показать, что DLL не может запуститься.

    Вы можете поместить ваши функции в DLL следом за стартовой функцией или до нее. Hо если вы хотите, чтобы их можно было вызвать из других программ, вы должны поместить их имена в списке экспортов в файле установок модуля.

    DLL требуется данный файл на стадии разработки. Мы сейчас посмотрим, что это такое.

    LIBRARY DLLSkeleton EXpORTS TestFunction

    Обычно у вас должна быть первая строка. Ключевое слово LIBRARY определяет внутреннее имя модуля DLL. Желательно, чтобы оно совпадало с именем файла.

    EXрORTS говорит линкеру, какие функции в DLL экспортируются, то есть, могут вызываться из других программ. В прилагающемся примере нам нужно, чтобы другие модули могли вызывать TestFunction, поэтому мы указываем здесь ее имя.

    Другое отличие заключается в параметрах, передаваемых линкеру. Вы должны указать /DLL и /DEF:.

    link/DLL /SUBSYSTEM:WINDOWS/DEF:DLLSkeleton.def/LIBpATH:c:\masm32\lib DLLSkeleton.obj

    Параметры ассемблера те же самые, обычно /c /coff /Cp. После компиляции вы получите .dll и .lib. Последний файл - это библиотека импорта, которую вы можете использовать, чтобы прилинковать к другим программам функции из соответствующей .dll.

    Далее я покажу вам как использовать LoadLibrary, чтобы загрузить DLL.

    ;---------------------------------------------------------------------------- ; UseDLL.asm ;----------------------------------------------------------------------------




    Содержание  Назад  Вперед