
- •6.050101 «Комп’ютерні науки»
- •Загальні вимоги до виконання лабораторних робіт
- •Лабораторна робота №1
- •1. Основні теоретичні відомості
- •1.1 Основні поняття
- •1.2 Створення процесу
- •1.3 Створення потоку
- •2. Хід роботи
- •4. Завдання
- •5. Контрольні запитання
- •6.Список використаної літератури
- •Додаток 1
- •Додаток 2
- •Додаток 3
- •Функція CreateProcess створює новий процес.
- •Додаток 4
- •Додаток 5
- •Addr ThreadId – Створює новий потік.
- •Додаток 6
- •Додаток 7
- •Лабораторна робота №2
- •1. Основні теоретичні відомості
- •1.1 Механізми міжпроцесової взаємодії
- •1.2 Механізми синхронізації процесів та потоків
- •1.3 Об’єкти синхронізації
- •1.4 Очікуючі функції
- •1.5 Створення атома
- •1.6 Створення каналу
- •2. Хід роботи
- •4. Завдання
- •5. Контрольні запитання
- •6.Список використаної літератури
- •Додаток 1
- •Додаток 2
- •Додаток 3
- •Додаток 4
- •Додаток 5 Детальний опис функції створення анонімного каналу
- •Додаток 6 Детальний опис функції створення іменованого каналу
- •Додаток 7
- •Додаток 8
- •Додаток 9 Текст програми створення анонімного каналу
- •Додаток 10
- •Лабораторна робота №3
- •1. Основні теоретичні відомості
- •2. Приклад програми створення dll
- •Опис програми My_dll.Asm та файлу лістінга My_dll.Def
- •4. Трансляція та компонування dll Для того, щоб відтранслювати(ml.Exe) та зкомпонувати (link.Exe) даний .Asm код, потрібно використовувати наступні параметри:
- •5. Приклад використання функції з бібліотеки
- •Приклад програми завантаження dll
- •7. Створення файлу лістінгу існуючої бібліотеки
- •8. Приклад передачі даних у функцію бібліотеки Створення динамічно завантажуваної бібліотеки
- •Передача параметру у функцію бібліотеки
- •9. Хід роботи
- •11. Завдання
- •12. Контрольні запитання
- •13. Список використаної літератури
- •Лабораторна робота №4
- •1. Основні теоретичні відомості
- •Параметри функції CreateToolhelp32Snapshot:
- •2. Перегляд процесів
- •3. Перегляд потоків
- •Значення результуючого параметру (регістр еах) таке саме як в Process32First і Process32Next.
- •4. Перегляд хіпів асоційованих з процесом
- •5. Перегляд модулів, які використовує процес
- •6. Керування процесами
- •7. Хід роботи
- •9. Завдання На 75 балів виконати 4 завдання:
- •10. Контрольні запитання
- •11. Список використаної літератури
- •Додаток 1
- •Лабораторна робота №5
- •Основні теоретичні відомості
- •1.1 Основні поняття
- •1.2 Категорії даних
- •1.3 Відкриття і закриття ключів реєстру
- •1.4 Створення підключа у відкритому ключі реєстру
- •1.5 Отримання інформації з ключа реєстру
- •1.6 Перелічення списку значень для заданого ключа реєстру
- •1.7 Виявлення змін в гілці реєстру
- •1.8 Робота з налаштуваннями операційної системи через реєстр
- •2. Хід роботи
- •4. Завдання
- •5. Контрольні запитання
- •6. Список використаної літератури
- •Додаток 1
- •Лабораторна робота №6
- •1. Основні теоретичні відомості
- •Породження процесів
- •1.2 Породження потоків
- •2. Хід роботи
- •4. Індивідуальні завдання
- •5. Контрольні запитання
- •Для нотаток Для нотаток Для нотаток
2. Приклад програми створення dll
;--------------------------------------------------
; My_DLL.asm
;---------------------------------------------------
.386
.model flat,stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
.data
AppName db "My_DLL",0
HelloMsg db "Привіт! Це функція з бібліотеки My_DLL",0
LoadMsg db "Завантаження бібліотеки DLL у пам'ять ",0
UnloadMsg db "Вивантаження бібліотеки DLL з пам'яті",0
ThreadCreated db "Створення вітки у цьому процесі",0
ThreadDestroyed db "Знищення вітка цього процесу",0
.code
DllEntry proc hInstance:HINSTANCE, reason:DWORD, reserved1:DWORD
.if reason==DLL_PROCESS_ATTACH
invoke MessageBox,NULL,addr LoadMsg,addr AppName,MB_OK
.elseif reason==DLL_PROCESS_DETACH
invoke MessageBox,NULL,addr UnloadMsg,addr AppName,MB_OK
.elseif reason==DLL_THREAD_ATTACH
invoke MessageBox,NULL,addr ThreadCreated,\
addr AppName,MB_OK
.else ;.if reason== DLL_THREAD_DETACH
invoke MessageBox,NULL,addr ThreadDestroyed,\
addr AppName,MB_OK
.endif
mov eax,TRUE
ret
DllEntry Endp
TestHello proc
invoke MessageBox,NULL,addr HelloMsg,addr AppName,MB_OK
ret
TestHello endp
End DllEntry
Опис файлу лістинга з розширенням *.def
;--------------
; My_DLL.def
;--------------
LIBRARY My_DLL
EXPORTS TestHello
Опис програми My_dll.Asm та файлу лістінга My_dll.Def
Кожна DLL повинна мати стартову функцію.
Windows викликає цю функцію у випадку коли:
- DLL завантажується перший раз у пам’ять;
- DLL вивантажується з пам’яті;
- створюється нова вітка в цьому ж процесі;
- знищується нова вітка цього процесу;
Ця функція одержує три параметри:
hinstDLL – це дескриптор модуля DLL.
reason - може мати одне з чотирьох значень:
DLL_PROCESS_ATTACH – DLL одержує це значення коли вперше загружається в адресний простір процесу.
DLL_PROCES_DETACH – DLL одержує це значення коли вивантажується з адресного простору процесу.
DLL_THREAD_ATTACH – DLL одержує це значення коли процес створює нову вітку.
DLL_THREAD_DETACH –DLL одержує це значення коли процес
reserved – визначає наступні аспекти встановлення або очищення
DLL. (рідко викоритовується)
Для того, щоб можна було використовувати функції з бібліотеки іншою програмою, їх потрібно оголосити в файлі імпорту : My_DLL.def
LIBRARY My_DLL
EXPORTS TestHello
LIBRARY - Вказує ім’я бібліотеки.
EXPORTS - Повідомляє компонувальник (лінкер) які функції в DLL експортуються, тобто викликаються із інших програм. В даному випадку нам потрібно щоб інші програми могли викликати функцію TestHello.
4. Трансляція та компонування dll Для того, щоб відтранслювати(ml.Exe) та зкомпонувати (link.Exe) даний .Asm код, потрібно використовувати наступні параметри:
ML.EXE /c /coff /Cp My_DLL.asm
LINK.EXE /DLL /SUBSYSTEM:WINDOWS /DEF:My_DLL.def /LIBPATH:d:\masm32\lib My_DLL.obj
Опис параметрів:
/c – говорить MASM’у створити .obj файл формату COFF (Common Object File), який використовується в ОС UNIX як його власний об'єктний і виконуваний формат файлів.
/Cp – говорить MASM’у зберігати регістр назв, заданих програмістом. Можна також вставити в код програми (після директиви .model) стрічку :option casemap:none, щоб одержати такий самий ефект, тобто, щоб MASM розрізняв великі і малі символи.
/DLL – говорить link’еру створити DLL
/SUBSYSTEM:WINDOWS – говорить ink’еру якого виду буде виконуваний модуль.
/DEF - підключає файл імпорту в якому оголошені функції.
/LIBPATH – говорить link’еру де знаходяться бібліотеки імпорту.