
- •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. Контрольні запитання
- •Для нотаток Для нотаток Для нотаток
Додаток 3
Детальний опис функції CreateProcess.
invoke CreateProcess,ADDR programname,NULL,NULL,NULL,FALSE,\
NORMAL_PRIORITY_CLASS,NULL,NULL,\
ADDR startInfo,ADDR processInfo
Функція CreateProcess створює новий процес.
CreateProcess PROTO lpApplicationName:DWORD, lpCommandLine:DWORD,\
lpProcessAttributes:DWORD,lpThreadAttributes:DWORD,\
bInheritHandles:DWORD,dwCreationFlags:DWORD,\
lpEnvironment:DWORD,lpCurrentDirectory:DWORD,\
lpStartupInfo:DWORD,lpProcessInformation:DWORD
lpApplicationName --> Вказівник на ім’я виконуваного файлу, з шляхом або без нього, який потрібно запустити. Якщо цей параметр рівний NULL, то ім’я виконуваного файлу береться з lpCommandLine.
lpCommandLine --> Вказівник на командну стрічку в котрій вказаний шлях до програми, яку потрібно запустити. Якщо lpCommandLine рівний NULL, то стрічка береться з lpApplicationName.
lpProcessAttributes і lpThreadAttributes --> Тут вказуються атрибути безпеки для процесу і основної пам’яті. Коли параметри рівні NULL, то атрибути безпеки використовуються по замовчуванню.
bInheritHandles --> Прапорець, який вказує, чи потрібно наслідувати всі відкриті дескриптори процесу в новому процесі.
dwCreationFlags --> Декілька прапорців, які визначають поведінку процесу, який потрібно створити. Наприклад, можна створити процес і відразу призупинити його виконання, щоб можна було його провірити або змінити до його виконання. Також можна вказати клас пріоритету потоку або потоків у новому процесі. Цей клас пріоритету використовується щоб визначити запланований пріоритет віток всередині процесу. Зазвичай використовують прапорець NORMAL_PRIORITY_CLASS.
lpEnviroment --> Вказівник на блок пам’яті, який містить декілька змінних оточення для нового процесу. Якщо цей параметр рівний NULL, то новий процес наслідує цей вказівник від батьківського процесу.
lpCurrentDirectory --> Вказівник на стрічку з поточним диском і директорією для “дочірнього” процесу. NULL- якщо потрібно, щоб “дочірній” процес отримав цей вакзівник від батьківського процесу.
lpStartupInfo --> Вказує на структуру STARTUPINFO, яка визначає як має з’явитись основне вікно нового процесу. Ця структура містить багато членів, які виділяють появу головного вікна “дочірнього” процесу. Цю структуру можна заповнити значеннями батьківського процесу, викликавши функцію GetStartupInfo.
lpProcessInformation --> Вказує на структуру PROCESS_INFORMATION, яка дістає ідентифікаційну інформацію про новий процес. Структура PROCESS_INFORMATION.
Додаток 4
Текст програми створення потоку
.386
.model flat, stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\user32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
.data?
ThreadID DWORD ?
.data
MsgCaption db "Привiт!",0
MsgBoxText db "В цiй програмi створюється новий потік",0
MsgBoxText2 db "Це повiдомлення нового потоку",0
MsgBoxText3 db "Завершення програми, яка створює новий потік",0
.code
ThreadProc PROC Param:DWORD
invoke MessageBox, NULL,addr MsgBoxText2, addr MsgCaption, MB_OK
ret
ThreadProc ENDP
start:
invoke MessageBox, NULL,addr MsgBoxText, addr MsgCaption, MB_OK
mov eax,OFFSET ThreadProc
invoke CreateThread,NULL,NULL,eax, NULL,NORMAL_PRIORITY_CLASS,\
ADDR ThreadID
invoke MessageBox, NULL,addr MsgBoxText3, addr MsgCaption, MB_OK
invoke ExitProcess,NULL
end start
Результат виконання програми:
Дана програма виводить повідомлення “Привіт!”, після натиску кнопки “ОК”, створюється новий потік, котрий виводить своє повідомлення “Привіт!”. Одночасно з викликом повідомлення потоку викликається повідомлення батьківської програми (процесу) про завершення програми. Одночасно із завершенням батьківської програми (після натиску “ОК”) завершується повідомлення потоку.