DevioLabавтоматичне керування капіталом
ПРАЦЮЄ 24/7
КРИПТОВАЛЮТИ · АКЦІЇ · 10 БІРЖ

Портфель, який керується автоматично

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

10підключених біржCrypto + Stocksв одному портфелі24/7автоматичний контроль

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

Оригінальна назва роботи

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

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

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Інститут комп’ютерних наук та інформаційних технологій
Факультет:
КН
Кафедра:
Кафедра електронних обчислювальних машин

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

Рік:
2017
Тип роботи:
Лабораторна робота
Предмет:
Системне програмування
Група:
КН-31
Коротко про документ

Про що ця робота

У звіті наведено результати виконання лабораторної роботи з розробки та використання динамічних бібліотек на мові Асемблер. Досліджено механізм явного зв’язування DLL за допомогою функцій LoadLibrary та GetProcAddress.

У роботі розглядаються

  • Системне програмування
  • Динамічні бібліотеки DLL
  • Явне зв’язування бібліотек
  • Операційна система Windows
  • Програмування низького рівня

Зміст і розділи

  1. Мета лабораторної роботи
  2. Теоретичні відомості
  3. Індивідуальне завдання
  4. Код програми
  5. Результат виконання програми
  6. Висновок
Для кого:Студенти технічних спеціальностей та викладачі вищих навчальних закладів.
Викладачі:Лашко О. Л.

Ключові поняття

динамічна бібліотекаявне зв’язуванняLoadLibraryGetProcAddressDllMainанімаціяфункціяпам’ятькомпонування

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

Міністерство освіти і науки Національний університет “Львівська політехніка” Кафедра ЕОМ / Звіт з лабораторної роботи № 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 Результат виконання програми / / Висновок Я ознайомився з технологією та оволодів навиками створення та використання бібліотек динамічного компонування з використанням явного зв’язування на мові Асемблер.
Допоможи студентському архіву

Ми допомогли тобі — допоможи наступному студенту

Файл ще не обрано

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

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

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

Admin

26.02.2023 12:38

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