Загальна характеристика динамічних бібліотек



Динамічні бібліотеки (Dynamic Link Library - DLL), файли з розширенням DLL, завантажуються під час завантаження модуля, який використовує бібліотеку, або під час його виконання.

Переваги DLL:

- бібліотеки не залежать від середовища, в якому вони створені. Так, бібліотеку, яку було створено в середовищі С++ Builder, може бути використано в середовищі Visual Studio та навпаки;

- при зміні коду бібліотеки не потрібна повторна компоновка додатків, які використовують цю бібліотеку, ось чому операційна система використовує цей тип бібліотек для модулів, які можуть змінюватися в залежності від версії та в разі помилок;

- якщо декілька додатків використовують одну і ту ж бібліотеку, копія цієї бібліотеки зберігається в пам’яті тільки один раз.

Недоліки DLL:

- окрім програми, яка виконується необхідно мати додатковий модуль – саму бібліотеку;

- функції DLL використовувати складніше, ніж функції статичної бібліотеки.

Решта переваг та недоліків DLL залежать від режимів використання бібліотеки цього типу.

Порівняйте переваги і недоліки кожного типу бібліотек і зробіть висновки по тому, коли треба використовувати кожний тип бібліотеки.

Створення статичних бібліотек

Незалежно від середовища, в бібліотеку можна підключати C++, C, OBJ файли. Файли на мові Асемблер мають особливості, які залежать від середовища, тому краще усі функції писати з заголовком на мові С. 

Розглянемо формування статичної бібліотеки для Visual Studio 2008, для інших середовищ бібліотеки створюються подібно.

Спосіб 1. Використання середовища. Виконати Project®Win32 Project і далі обрати в Application Settings - Static library і далі натиснути Finish. До проекту можна додавати як нові компоненти, так і вже існуючі. у тому числі інші статичні бібліотеки. Серед модулів, які додаються не може бути модуля з визначенням головної функції. В результаті буде сформовано файл *.lib. Ім’я бібліотеки співпадає з іменем проекту, його можна замінити. Бібліотека вміщує довідник функцій, в якому для кожної функції визначається її відносна адреса і розмір. Після довідника розташовані самі функції.

Недолік цього способу – треба ввійти в середовище для розробки при довільних змінах в бібліотеці, наприклад, додавання коментаря.

Спосіб 2. Використання командного файлу. Для створення бібліотеки необхідно виконати:

- компіляцію усіх файлів з розширенням c, cpp (програма cl.exe);

- створення бібліотеки з окремих об’єктних модулів (програма lib.exe).

При завданні програм для виконання необхідно задавати повне ім’я файлу.

Для програми cl.exe дуже багато параметрів, але обов’язковими є тільки:

/I " Шлях до каталогу include Visual Studio ", якщо використовуються стандартні файли заголовків;

/c – тільки компіляція (компонувальник не використовується);

Приклад рядка для виклику cl.exe, якщо каталог для двійкових файлів"c:\Program Files\Microsoft Visual Studio 9.0\VC\bin, каталог для стандартних файлів – заголовків: c:\Program Files\Microsoft Visual Studio 9.0\VC\include, а в бібліотеку треба підключити функції з файлу static.cpp:

"c:\Program Files\Microsoft Visual Studio 9.0\VC\bin\cl.exe" /I "c:\Program Files\Microsoft Visual Studio 9.0\VC\include" /c static.cpp

Для перевірки успішності завершення компіляції (не було помилок компіляції) використовуємо рядок:

if ErrorLevel 1 goto merror

Для програми lib.exe в якості параметрів задаються:

/OUT: Імя файлу – бібліотеки з розширенням lib;

Імена об’єктних файлів, та бібліотек, які необхідно підключити до бібліотеки.

Приклад рядка для виклику lib.exe, якщо каталог для двійкових файлів"c:\Program Files\Microsoft Visual Studio 9.0\VC\bin і в бібліотеку підключається файл static.obj:

"c:\Program Files\Microsoft Visual Studio 9.0\VC\bin\lib.exe" /OUT:static.lib static.obj

Для перевірки успішності створення бібліотеки використовуємо рядок:

if ErrorLevel 1 goto merror

Після створення бібліотеки знищуємо непотрібні файли типу .obj (рядок del *.obj)

Таким чином, командний файл (назвемо його static.cmd):

"c:\Program Files\Microsoft Visual Studio 9.0\VC\bin\cl.exe" /I "c:\Program Files\Microsoft Visual Studio 9.0\VC\include" /c static.cpp

if ErrorLevel 1 goto merror

"c:\Program Files\Microsoft Visual Studio 9.0\VC\bin\lib.exe" /OUT:static.lib static.obj

if ErrorLevel 1 goto merror

del *.obj

echo ok

goto mok

:merror

echo error

:mok

Порівняйте бібліотеки, створені в середовищі, та за допомогою командного файлу!

 

Створення DLL

Розглянемо формування DLL бібліотеки для Visual Studio 2008, для інших середовищ бібліотеки створюються подібно.

Для створення DLL в середовищі використовується проект типу DLL (File®New®Projects®Win32). Після завдання імені проекту обирається тип DLL і, поки що, обираємо пусту DLL (An empty DLL project). Додамо до проекту необхідні файли з визначення функцій. Додамо файл з заголовками експортованих функцій. Ці функції повинні в заголовку мати __declspec (dllexport).

Трансляція та компоновка DLL виконується як і для проектів інших типів.

В результаті виконання буде створено один або 2 файли: файл *.dll і, *.lib, якщо є хоч одна експортована функція. Імена файлі по замовченню співпадають з іменем проекту. Ці імена можна замінити. Файл *.lib вміщує довідник функцій, а саме ім’я відповідної DLL та таблицю функцій. для кожної функції задається її ім’я, номер, та адреса відносно початку DLL. Раніше номер використовувався для виклику відповідної функції, сьогодні для виклику функцій використовується тільки її ім’я.

Використання DLL

Згадайте режими використання DLL:

- завантаження DLL під час завантаження додатка, який використовує DLL (якщо попередні додатки не завантажили цю DLL). Вивантаження після завершення цього додатку (якщо другі додатки не використовують цю DLL);

- завантаження та вивантаження DLL виконується за допомогою функцій WINAPI тоді, коли необхідно використовувати функції DLL (коли необхідність в функціях відпадає).

Для першого режиму використання необхідно підключити до проекту, який використовує функції з DLL, файл з розширенням lib, який сформовано при виконанні 2.2.4. В заголовках функцій з DLL необхідно вказати __declspec (dllimport). Далі функції викликаються як для статичної бібліотеки.

Переваги першого режиму.

1. Якщо немає необхідної DLL, програма не буде завантажена.

2. Використання по складності однаково з використанням статичних бібліотек.

Недоліки першого режиму:

1. Файл з розширенням lib є платформенно залежним, тобто Visual Studio, C++ Builder використовують різні файли.

2.  Бібліотека завантажується при завантаженні програми та залишається завантаженою до тих пір, поки програма не завершиться. А можливо, що бібліотека зовсім не буде потрібна (виконується частина програми, яка не викликає функцій бібліотеки), або використовується тільки на початку програми.

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

Для  другого режиму використання необхідно виконати такі кроки.

1. Підключити файл заголовків Windows.h

2. Перед використанням першої функції з DLL завантажити цю DLL. Для цього використовується функція LoadLibrary.

HMODULE WINAPI LoadLibrary( LPCTSTR lpFileName);

3. Після використання цієї функції необхідно перевірити успішність завантаження (результат не дорівнює 0).

4. Для кожної функції із бібліотеки, яку потрібно використовувати, треба визначити адресу цієї функції. Для цього використовується функція

FARPROC WINAPI GetProcAddress( HMODULE hModule, LPCSTR lpProcName );

     де hModule – дескриптор бібліотеки;

     lpProcName – імя функції (внутрішнє).

5. Внутрішнє ім’я функції можна знайти в самій DLL. Для того, щоб крім внутрішнього імені можна було б використовувати звичайне ім’я, ці імена необхідно задати в файлі з розширенням DLL. Після використання функції визначення адреси, необхідно перевірити успішність цієї функції (адреса не дорівнює 0).

6. Далі функції викликаються як звичайні функції.

7. Після виклику останньої функції бібліотеку можна вигрузити. Для цього використовується функція FreeLibrary:

BOOL WINAPI FreeLibrary( HMODULE hModule);

8. Якщо функції DLL використовуються до кінця програми, функцію FreeLibrary можна не використовувати, операційна система визволить усі ресурси при завершенні програми. DLL відноситься до ресурсів.

Алгоритм шифрування RSA

1. Формується 2 простих числа (p, q, p!=q).

2. Формується добуток для цих чисел, будемо далі називати цей добуток модулем n = p * q.

3. Формується функція Ейлера для цих чисел по формулі:

                        j = (p - 1) * (q - 1).

4. Формуються ключі для крипто перетворень. Ключ для шифрування даних E – випадкове число, яке взаємно просте з j,  ключ для розшифрування даних D задовольняє формулі D * E = 1 mod (j). Остання формула означає, що (D * E) % j = 1.

5. Шифрувати можна довільні дані, значення яких менше ніж n[1]. Для шифрування даних використовується ключ E, який в криптографії називають відкритим ключем. Для шифрування даного М використовується формула M’ = ME mod n. Отримане значення M’ – це зашифроване значення.

6. Для розшифрування використовується ключ D, який в криптографії називають особистим ключем. В даному випадку  розшифрувати дане зможе тільки власник особистого ключа. Зашифрувати дане  для нього може любий користувач, якому передали відкритий ключ даного користувача.  Для розшифрування використовується формула M = M’D mod n.

 


Дата добавления: 2018-05-13; просмотров: 631; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!