Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лаб2012 / ЛР15 Исследование процессов

.doc
Скачиваний:
20
Добавлен:
02.02.2015
Размер:
56.32 Кб
Скачать

СП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 с.

2