
- •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. Контрольні запитання
- •Для нотаток Для нотаток Для нотаток
5. Приклад використання функції з бібліотеки
Дана бібліотека завантажується автоматично ОС Windows.
;------------------------------------
; Prog.asm
;------------------------------------
.386
.model flat,stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
includelib My_DLL.lib
includelib \masm32\lib\kernel32.lib
TestHello PROTO
.code
start:
invoke TestHello
invoke ExitProcess,NULL
end start
Недоліком такого способу виклику бібліотеки: includelib My_DLL.lib є те, що в разі відсутності такої бібліотеки Windows видасть повідомлення про помилку підключення бібліотеки і програма не буде дальше виконуватись.
Щоб уникнути цієї проблеми, потрібно викликати бібліотеку за допомогою функцій LoadLibrary або LoadLibraryEx.
Приклад програми завантаження dll
Дану бібліотеку завантажує програміст, використовуючи функцію LoadLibrary.
;-----------------------------------
; Prog_2.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\kernel32.lib
includelib \masm32\lib\user32.lib
.data
LibName db "My_Dll.dll",0
FunctionName db "TestHello",0
DllNotFound db "Неможливо загрузити бібліотеку",0
AppName db "Load Library",0
FunctionNotFound db "Неможливо знайти TestHello функцію",0
.data?
hLib dd ?
TestHelloAddr dd ?
.code
start:
invoke LoadLibrary,addr LibName
.if eax==NULL
invoke MessageBox,NULL,addr DllNotFound,\
addr AppName,MB_OK
.else
mov hLib,eax
invoke GetProcAddress,hLib,addr FunctionName
.if eax==NULL
invoke MessageBox,NULL,\
addr FunctionNotFound,\
addr AppName,MB_OK
.else
mov TestHelloAddr,eax
call [TestHelloAddr]; Виклик ф-ї з
; бібліотеки
.endif
invoke FreeLibrary,hLib ; Зменшує лічильник зсилок
; на бібліотеку ,якщо цей лічильник рівний нулю, то це означає, що ;бібліотеки вже ніхто не використовує і вона вивантажується з ;пам’яті
.endif
invoke ExitProcess,NULL
end start
7. Створення файлу лістінгу існуючої бібліотеки
У випадку, коли потрібно переглянути функції, які знаходяться у динамічно завантажуваній бібліотеці, можна використати програму DUMPBIN.EXE з пакету MASM32 або IMPDEF.EXE з пакету TASM.
Вигляд командного рядка для програми dumpbin.exe:
E:\masm32\BIN>DUMPBIN.EXE /EXPORTS USER32.DLL > Hello.txt
E:\masm32\BIN>type Hello.txt | more
* * *
ordinal hint RVA name
1 0 00001371 ActivateKeyboardLayout
2 1 00005940 AdjustWindowRect
3 2 0000161B AdjustWindowRectEx
4 3 00001158 AlignRects
Вигляд командного рядка для програми impdef.exe:
D:\impdef.exe Ours_File.def user32.dll
D:\type Ours_File.def | more
LIBRARY USER32.DLL
EXPORTS
ActivateKeyboardLayout @1
AdjustWindowRect @2
AdjustWindowRectEx @3
AlignRects @4
AnimateWindow @5
AnyPopup @6
AppendMenuA @7
AppendMenuW @8
ArrangeIconicWindows @9
AttachThreadInput @10
-- Далее --