Лаб2012 / ЛР15 Исследование процессов
.docСП12, ЛР15: «Дослідження процесів», НТУ ХПИ, КИТ-11а, Иванов И.И.
Лабораторна робота №15: “Дослідження процесів”
Мета заняття:
набути практичних навичок створення процесів, написаних мовою асемблеру з використанням АРІ-функцій під Win32.
Постановка задачі
Написати головну програму, яка за допомогою меню та кнопок керує іншими діями, заданими в варіантах завдання. Надати можливість виведення назв файлів програм та примусового їх завершення. Варіанти завдань такі (узгоджуються з викладачем):
1. Читання файлу з інтернету та його виконання не більше 3 разів та програми калькулятора (calc.exe) не більше 2 разів. Програма з інтернету виконується 15 секунд, а програма calc.exe виконується 30 секунд;
2. Завершити процес explorer.exe, а потім запустити його. Виконати дії з маніпуляцією цієї програми (наприклад, виконати такі дії декілька разів);
3. Передати повідомлення з однієї програми в дві інші;
4. Запуск однієї програми, створеної особисто та програми калькулятора (calc.exe). Особисто створена програми виконується 15 секунд, а програма calc.exe виконується 20 секунд;
5. Запуск двох програм, створених особисто та якої-небудь програми з системної папки, наприклад для Windows XP: С:\Windows\system32 та їх завершення через різні інтервали часу;
6. Запуск однієї програми, створеної особисто не більше 3 разів та програми калькулятора (calc.exe) не більше 4 разів. Особисто створена програми виконується 10 секунд, а програма calc.exe виконується 20 секунд;
7. Запуск однієї програми, створеної особисто не більше 4 разів та програми налагоджувача (OllyDbg.exe) не більше 3 разів. Обмежити час їх виконання.
8*. Примусове завершення системних процесів;
9*. Завершення довільного процесу, а також всіх процесів, які породжені ним і його дочірніми процесами.
Приклад 22.2. Створення програми запуску зовнішньої програми.
Лістінг 34.1. Програма запуску зовнішньої програми:
.686 ; директива визначення типу мікропроцесора
.model flat,stdcall ; завдання лінійної моделі пам’яті та угоди ОС Windows
option casemap:none ; відмінність малих та великих літер
include \masm32\include\windows.inc ; файли структур, констант …
include \masm32\macros\macros.asm
uselib kernel32, user32 ; макрос з підключеними бібліотеками
.data
buff db 100 dup(?)
; programname db "c:\windows\system32\calc.exe",0
programname db "1-1.exe",0
titl db 'Level 0',0
mask1 db 'My ProcID = %i (decimal)',0
startInfo dd ?
processInfo PROCESS_INFORMATION <> ; інф. про процес і його первинну нитку
.code
start:
invoke CreateProcess, ADDR programname, 0,0,0,FALSE,\
NORMAL_PRIORITY_CLASS, 0,0, ADDR startInfo, ADDR processInfo
invoke GetCurrentProcessId ; витягує псевдодескриптор для поточного процесу
invoke wsprintf, addr buff, addr mask1, eax
invoke MessageBox,NULL,addr buff, addr titl, MB_ICONINFORMATION+180000h
invoke ExitProcess,0
end start ; закінчення програми з ім’ям start
Результат виконання програми наведено на рис. 34.1.
Програма з іменем 1-1.asm наведена в лістингу 34.2.
Лістинг 34.2. Програма з іменем 1-1.asm, яку запускають як зовнішню:
.686 ; директива визначення типу мікропроцесора
.model flat,stdcall ; завдання лінійної моделі пам’яті та угоди ОС Windows
option casemap:none ; відмінність малих та великих літер
include \masm32\include\windows.inc ; файли структур, констант …
include \masm32\macros\macros.asm
uselib kernel32,user32
.data
st1 db "Процесс активный",0 ; буфер виведення повідомлення
titl db "Просто MessageBox",0
.code ; директива визначення даних
start:
invoke MessageBox,0 \ ; АРІ-функція виведення вікна консолі
addr st1, \ ; адреса рядка, яка містить текст повідомлення
addr titl, \ ; адреса рядка, яка містить заголовок повідомлення
MB_ICONINFORMATION+180000h ; вигляд вікна
invoke ExitProcess, 0 ; повернення керування ОС Windows та визволення ресурсів
end start ; директива закінчення програми з іменем start
В якості прикладу можна створити декілька однакових програм з різними іменами. В кожній програмі в секції даних записані імена файлів, які вона викликає й виконує з цього списку. Таким чином, одна програма викликає наступну.
Наприклад, програма з іменем Proc1 містить рядок
programname db "1-1.exe",0
Програма з іменем Proc2 містить рядок
programname db " Proc1.exe",0
Програма з іменем Proc3 містить рядок
programname db " Proc2.exe",0
В такій послідовності при запуску програми Proc3.ехе буде виконана програма Proc2.ехе, яка викликає програму Proc1.ехе. А програма Proc1.ехе вже викликає програму 1-1.exe.
Якщо необхідно запускати програму декілька раз, то треба вставити лічильник.
Приклад 22.2. Читання файлу з інтернету та його виконання.
Лістинг 34.4. Читання файлу з інтернету та його виконання:
.386
.model flat, stdcall
option casemap :none
include \masm32\include\windows.inc
include \masm32\macros\macros.asm
uselib kernel32, user32, urlmon, shell32
.code
start:
invoke URLDownloadToFile, 0, chr$("http://kaimi.ru/hello_world.exe"), \
chr$("hello_world.exe"), 0, 0
invoke ShellExecute, 0, chr$("open"), chr$("hello_world.exe"), 0, 0, \
SW_SHOWNORMAL
invoke ExitProcess, 0
end start
Література: Рисований О.М. Системне програмування [Текст]: підручник для студентів напрямку “Компютерна інженерія” вищих навчальних закладів. Видання друге: виправлено та доповнено – Х.: “Слово”, 2011. – 944 с.