Процедура libEntry является
точкой входа в динамическую библиотеку,
её не надо объявлять как экспортируемую,
загрузчик сам определяет её местонахождение.
LibEntry может вызываться в четырёх случаях:
-
при проецировании библиотеки
в адресное пространство процесса (DLL_PROCESS_ATTACH);
-
при первом вызове библиотеки
из потока (DLL_THREAD_ATTACH), например,
с помощью функции LoadLibrary;
-
при выгрузке библиотеки
потоком (DLL_THREAD_DETACH);
-
при выгрузке библиотеки
из адресного пространства процесса
(DLL_PROCESS_DETACH).
В нашем примере обрабатывается
только первое из событий DLL_PROCESS_ATTACH.
При обработке данного события библиотека
запрашивает версию OS сохраняет её, а
также свой handle of instance.
Библиотека содержит только
одну экспортируемую функцию, которая собственно
не требует пояснений. Вы, пожалуй, можете
обратить внимание на то, как производится
запись преобразованных значений. Интересна
система адресации посредством двух регистров
общего назначения: ebx + ecx, она позволяет
нам использовать регистр ecx одновременно
и как счётчик и как составную часть адреса.
|