
- •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
Текст програми, котра відкриває семафор, зчитує дані з файлу та знищує семафор.
;----------------------------------
; Sem_Read.asm ;
.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
;wsprintfA PROTO C :DWORD, :VARARG
;wsprintf equ <wsprintfA>
.data
MsgCaption db "Повiдомлення!",0
ErrorOpenSem db "Помилка вiдкриття семафору",0
ErrorCreateFile db "Помилка створення файлу",0
ErrorReadFile db "Помилка зчитування з файл",0
ErrorReleaseSem db "Помилка знищення семафору",0
;buffer db 256 dup (?)
;parameter db "%u"
check DWORD 0
Readed DWORD 0
fBuffer db 25 dup (0)
sName db "MySemaphore",0
fName db "C:\Temp\MYFILE.TXT",0
.data?
hSemaphore HANDLE ?
hFile HANDLE ?
.code
start:
invoke OpenSemaphore, SEMAPHORE_ALL_ACCESS, TRUE, addr sName
.if eax==0
invoke MessageBox, NULL,addr ErrorOpenSem, addr MsgCaption, MB_OK
jmp exit
.endif
mov hSemaphore, eax
invoke CreateFile, addr fName, GENERIC_READ or GENERIC_WRITE,\
FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,NULL
.if eax==INVALID_HANDLE_VALUE
invoke MessageBox, NULL,addr ErrorCreateFile, addr MsgCaption, MB_OK
invoke ReleaseSemaphore, hSemaphore, 1, NULL
jmp exit
.endif
mov hFile, eax
invoke ReadFile, hFile, addr fBuffer, 25,addr Readed, NULL
.if eax==0
invoke MessageBox, NULL,addr ErrorReadFile, addr MsgCaption, MB_OK
invoke ReleaseSemaphore, hSemaphore, 1, NULL
jmp exit
.endif
invoke MessageBox, NULL,addr fBuffer, addr MsgCaption, MB_OK
invoke CloseHandle, hFile
invoke ReleaseSemaphore, hSemaphore, 1, NULL
.if eax==0
invoke MessageBox, NULL,addr ErrorReleaseSem, addr MsgCaption, MB_OK
jmp exit
.endif
exit:
invoke ExitProcess,NULL
end start
Додаток 3
Текст програми створення глобального атома.
;----------------------------------
; AddAtom.asm
;----------------------------------
.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
MsgCaption db "Повiдомлення!",0
MyAtom DWORD 0
AtomName db "Привіт атом",0
ErrorAddAtom db "Неможливо створити атом",0
Success db "Атом успiшно створено",0
.code
start:
invoke GlobalAddAtom, addr AtomName
.if eax==0
invoke MessageBox, NULL,addr ErrorAddAtom,\
addr MsgCaption, MB_OK
jmp exit
.endif
mov MyAtom, eax
invoke MessageBox, NULL,addr Success,\
addr MsgCaption, MB_OK
exit:
invoke ExitProcess,NULL
e
nd
start
Результат виконання програми:
Опис програми:
Дана програма створює за допомогою функції GlobalAddAtom глобальний атом, тобто атом, котрий можуть “бачити” інші програми.
Для того, щоб звернутися до глобально атома (дізнатись його ім’я), потрібно використовувати функцію GlobalGetAtomName, якій потрібно передати дескриптор, котрий був отриманий після створення атома. Цей дескриптор може наслідуватись для використання іншими програмами. Для того, щоб дізнатись значення атома (ідентифікатор імені атома в таблиці атомів) потрібно використовувати функцію GlobalGetAtom, котрій передається параметром ім’я атома.