Описание функции GetProcAddress

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

Пример использования функции GetProcAddress приведен ниже:

PUSH offset DllExportFunctionName; загружается имя функции

PUSH dllHandle; загружается дескриптор модуля DLL

Call GetProcAddress; вызывается функция получения адреса процедуры

CMP EAX,0; сравнивается на равенство 0

JZ ErrorMessage_FunctionNotFound; если равно, то переход на вывод сообщения об ошибке

MOV DllExportFunctionAddress, eax; сохранение адреса в переменной

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

Описание функции FreeLibrary

Функция FreeLibrary декриментирует счетчик ссылок на загруженную DLL. Как только счетчик ссылок станет равным 0, DLL выгружается из адресного пространства вызвавшего ее процесса и дескриптор DLL перестает быть действительным.

В качестве входного параметра, функция FreeLibrary использует дескриптор DLL, полученный при её создании. В качестве выходного значения возвращается 0 (если функция не смогла успешно выполниться по какой-либо причине) или какое-то ненулевое значение.

Пример использования функции FreeLibrary приведен ниже:

PUSH DllHandle; загружается дескриптор DLL

Call FreeLibrary; вызывается функция освобождения DLL

JZ ErrorMessage_CantFreeLibrary; если 0, переход на вывод сообщения об ошибке

Описание некоторых API-функций

Взаимодействие пользовательского приложения с ОС осуществляется посредством вызовов API-функций. Как уже говорилось, вызов API-функции предваряется записью параметров этой функции в стек. Результат работы API-функции возвращается либо через область памяти (заполняется какими-либо значениями структура данных, адрес которой был передан в качестве параметра), либо с помощью регистра (как правило. EAX) и определяется назначением API-функции. В начале данного раздела механизм использования API-функций будет рассматриваться более подробно, а поскольку механизм их использования однотипен, в конце раздела API-функции будут просто перечисляться.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: