
- •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. Контрольні запитання
- •Для нотаток Для нотаток Для нотаток
Додаток 8
Текст клієнт - програми передачі повідомлення програмі - серверу.
;----------------------------------
; Client.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
include \masm32\include\masm32.inc
includelib \masm32\lib\masm32.lib
wsprintfA PROTO C :DWORD, :VARARG
wsprintf equ <wsprintfA>
.data
cbWritten DWORD 0
MyLength DWORD 0
dwMode DWORD 0
lpszPipename db "\\.\pipe\mypipename",0
MsgCaption db "Message!",0
ErrOpenPipe db "Error oрen pipe", 0
ErrSetState db "Error set cannal state",0
ErrWriteFile db "Error write pipe",0
ErrCreateFile db "Error connect pipe",0
Message db "Hello from client to server program!",0
theTitle db "Дана програма вiдiшле програмi - серверу повiдомлення ",0
buffer db 256 dup (?)
parameter db "%u"
.data?
hPipe DWORD ?
.code
start:
invoke MessageBox, NULL, addr theTitle, addr MsgCaption, MB_OK
invoke CreateFile,\
addr lpszPipename,\ ;pipe name
GENERIC_WRITE, \ ;write access
0, ;no sharing
NULL, \ ;no security atribute
OPEN_EXISTING, \ ;open existing file
0, \ ;default attributes
NULL ;no template file
mov hPipe,eax
.if hPipe==INVALID_HANDLE_VALUE
invoke GetLastError
invoke wsprintf,addr buffer,addr parameter,eax
invoke MessageBox, NULL, addr ErrCreateFile,\
addr buffer,MB_ICONERROR + MB_OK
jmp exit
.endif
invoke WaitNamedPipe,addr lpszPipename,100
.if eax == 0
invoke MessageBox, NULL, addr ErrOpenPipe,\
addr MsgCaption,MB_ICONERROR + MB_OK
jmp exit
.endif
mov eax,PIPE_READMODE_MESSAGE
mov dwMode,eax
invoke SetNamedPipeHandleState,\
hPipe,\
addr dwMode,\
NULL,\
NULL
.if eax == 0
invoke MessageBox, NULL, addr ErrSetState,\
addr MsgCaption,MB_ICONERROR + MB_OK
.endif
invoke lstrlen, addr Message
mov MyLength,eax
invoke WriteFile, \
hPipe, \
addr Message, \
MyLength,\
addr cbWritten,\
NULL
.if !eax
invoke GetLastError
invoke wsprintf,addr buffer,addr parameter,eax
invoke MessageBox, NULL, addr ErrWriteFile,\
addr buffer,MB_ICONERROR + MB_OK
.endif
invoke CloseHandle, hPipe
exit:
invoke
ExitProcess,NULL
end start
Результат виконання сервер – програми:
Результат виконання клієнт - програми:
В
ид
консольного вікна сервер – програми
після передачі йому повідомлення
від клієнт - програми:
Опис взаємодії сервер та клієнт – програми: Під час завантаження сервер – програма створює іменований канал за допомогою функції CreateNamedPipe у випадку успішного створення каналу, за допомогою функції ConnectNamedPipe, програма буде очікувати на під’єднання до неї прграми – клієнта. У випадку успішного під’єднання сервер - програма створює новий потік, котрий за допомогою функції ReadFile буде зчитувати дані з каналу.
Клієнт - програма відкриває канал за допомогою функції CreateFile використовуючи параметр OPEN_EXISTING, після успішного відкриття каналу, клієнт – програма встановлює стан каналу та записує у нього відповідне повідомлення, котре потрібно передати програмі - серверу.