Створення DLL та їх використання при явному зв’язування на мові Асемблер

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
КН
Кафедра:
Кафедра ЕОМ

Інформація про роботу

Рік:
2016
Тип роботи:
Лабораторна робота
Предмет:
Системне програмування та операційні системи

Частина тексту файла (без зображень, графіків і формул):

Міністерство освіти і науки Національний університет “Львівська політехніка” Кафедра ЕОМ / Звіт з лабораторної роботи № 7 з дисципліни: “Системне програмування” на тему: “Створення DLL та їх використання при явному зв’язування на мові Асемблер” Мета лабораторної роботи Ознайомитись з технологією та оволодіти навиками створення та використання бібліотек динамічного компонування з використанням явного зв’язування на мові Асемблер. Теоретичні відомості “Явне” зв’язування бібліотеки з програмою (Run-time dynamic linking) полягає в тому, що бібліотека (яка міститься у файлі з розширенням .dll) завантажується в пам’ять в момент часу, що визначається розробником, за допомогою виклику АРІ функцій LoadLibrary або LoadLibraryEX. При успішному виконанні функція повертає адресу точки входу. При відсутності бібліотеки, яку необхідно завантажити, або при помилках її завантаження функція поверне NULL, а сама програма, може продовжити виконання. Звичайно, якщо функції, що містяться у відсутній бібліотеці не є критичними для її подальшої роботи. Індивідуальне завдання 29. Ввести рядок тексту та два окремі символи. Вилучити з вхідного рядка всі другі символи після того як зустрінеться перший символ. Вивести новий рядок на екран. Код програми .dll Labor07.def LIBRARY Labor07 ; назва бібліотеки EXPORTS CharDelete ; назви функцій її інтерфейсу Labor07.asm .686 .model flat, stdcall option casemap : none include \masm32\include\windows.inc include \masm32\macros\macros.asm include \masm32\include\masm32.inc include \masm32\include\gdi32.inc include \masm32\include\user32.inc include \masm32\include\kernel32.inc include \masm32\include\msvcrt.inc includelib \masm32\lib\masm32.lib includelib \masm32\lib\gdi32.lib includelib \masm32\lib\user32.lib includelib \masm32\lib\kernel32.lib includelib \masm32\lib\msvcrt.lib .data? l dd ? .code DllEntry PROC hInstDLL : DWORD, reason : DWORD, reserved : DWORD mov eax, 1 ret DllEntry ENDP CharDelete PROC string : DWORD, char1 : BYTE, char2 : BYTE fn MessageBox, NULL, string, "Source String", MB_OK mov esi, string mov edi, 0 find_char1: cmp byte ptr [esi + edi], 0 je quit mov al, char1 cmp byte ptr [esi + edi], al je delete_char2 inc edi jmp find_char1 delete_char2: invoke crt_strlen, string mov l, eax ; l = length of string mov ecx, edi mov edx, edi ; edx = addr of char1 in string loop1: inc ecx cmp ecx, l jnl quit mov edi, edx loop2: inc edi cmp byte ptr [esi + edi], 0 je loop1 cmp byte ptr [esi + edi - 1], 0 je loop1 mov al, char2 .if byte ptr [esi + edi] == al mov al, byte ptr [esi + edi] mov bl, byte ptr [esi + edi + 1] mov byte ptr [esi + edi], bl mov byte ptr [esi + edi + 1], al .endif jmp loop2 quit: fn MessageBox, NULL, string, "Modified String", MB_OK ret CharDelete ENDP End DllEntry .exe .686 .model flat, stdcall option casemap : none include \masm32\include\windows.inc include \masm32\macros\macros.asm include \masm32\include\masm32.inc include \masm32\include\gdi32.inc include \masm32\include\user32.inc include \masm32\include\kernel32.inc includelib \masm32\lib\masm32.lib includelib \masm32\lib\gdi32.lib includelib \masm32\lib\user32.lib includelib \masm32\lib\kernel32.lib .data LibName db "Labor07.dll", 0 FunctionName db "CharDelete", 0 DllNotFound db "Cannot load library", 0 AppName db "Load explicit library", 0 NotFound db "CharDelete function not found", 0 string db "Hello, it is explicit dll function call", 0 char1 db 'o' char2 db 'l' .data? hLib dd ? .code start: invoke LoadLibrary, addr LibName ; завантаження бібліотеки .if eax == NULL ; якщо завантаження не вдалося invoke MessageBox, NULL, addr DllNotFound, addr AppName, MB_ICONWARNING .else mov hLib, eax ; збереження заголовку бібліотеки invoke GetProcAddress, hLib, addr FunctionName ; визначення адреси функції .if eax == NULL ; якщо не вдалося взяти адресу invoke MessageBox, NULL, addr NotFound, addr AppName, MB_ICONWARNING .else movzx ebx, char2 push ebx movzx ebx, char1 push ebx push offset string call eax ; виклик функції .endif invoke FreeLibrary, hLib ; вивантаження бібліотеки .endif invoke ExitProcess, EXIT_SUCCESS end start Результат виконання програми / / Висновок Я ознайомився з технологією та оволодів навиками створення та використання бібліотек динамічного компонування з використанням явного зв’язування на мові Асемблер.
Антиботан аватар за замовчуванням

07.05.2017 14:05-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!