Лабораторна робота №5

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
КН
Кафедра:
Кафедра ЕОМ

Інформація про роботу

Рік:
2015
Тип роботи:
Лабораторна робота
Предмет:
Системне програмування та операційні системи

Частина тексту файла (без зображень, графіків і формул):

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА” / Кафедра ЕОМ Звіт до лабораторної роботи № 5 з дисципліни " Системне програмування " Львів 2015 Мета: Ознайомитись з можливостями програмування на Асемблері під Windows та засвоїти навики використання функцій АРІ. ТЕОРЕТИЧНІ ВІДОМОСТІ Незважаючи на те що Wіndows 95/NT/ХР є складнішими операційними системам у порівнянні з DOS, програмувати для них на асемблері набагато простіше. Wіndows-задача запускається в 32-бітному режимі з плоскою (flat) моделлю пам’яті та не передбачає низькорівневого програмування різних пристроїв комп’ютера так як це було у DOS. В існуючих операційних системах програми користуються тільки системними викликами Wіn32 APІ функцій, число яких тут перевищує 2000 (близько 2200 для Wіndows 95 і 2434 для Wіndows NT). Всі Wіndows-задачі використовують спеціальний формат виконавчих файлів - формат РЕ (Portable Executable). Такі файли починаються як звичайні eхе-файлb старого зразка (їх також називають MZ за першими двома символами заголовку). Якщо такий файл запустити в DOS, він виконається й видасть повідомлення про помилку (текст повідомлення залежить від використовуваного компілятора), у той час як Wіndows помітить, що після звичайного MZ-заголовка файлу йде РЕ-заголовок, і запустить програму. Це буде означати лише те, що для компіляції програм будуть потрібні інші параметри в командному рядку. Win32 API (розшифровується як інтерфейс прикладного програмування) - це множина підпрограм-функцій, на яких побудована операційна система Windows, яка використовує 32х-бітну адресацію, починаючи з Windows 95 і закінчуючи Windows XP. Розробники Windows зробили багато зусиль щоб стандартизувати як назви функцій, так і їх параметри. Тому використовувати їх не так важко, якщо засвоїти деякі загальні концепції. Більшість функцій доступні для програм користувача, які написані для Windows на будь-якій мові програмування (у тому числі і на асемблері). Множина цих функцій розширюється при переході до наступної версії Windows, таким чином, забезпечується сумісність розроблених раніше програм із новими версіями операційної системи. Існують і функції, які не відображені документації, або для свого застосування вимагають від програми спеціальних прав доступу до пам’яті. Суть функцій API зрозуміти значно легше, якщо уявити, з яких файлів вони викликаються і на які групи ці функції поділяються. Асемблер - це як раз той зручний і простий засіб, який дозволить вам звертатись безпосередньо до будь-якої функції API, що знаходиться у DLL-файлі. Секрет пізнання операційної системи через програмування на асемблері полягає у тому, що сам асемблер не накладає жодних обмежень на програму та дані, з якими вона працює. Це повинен робити сам програміст з метою захисту операційної системи від своїх некоректних дій. Таким чином, основною метою системного програмування є написання коректних програм з необмеженими можливостями (в рамках операційної системи). Для збереження коректності необхідно користуватися певними правилами програмування, які будуть зрозумілі на конкретних прикладах. Типи програм. Процесори сімейства Intel можуть працювати в трьох основних режимах: реальному, віртуальному і захищеному. При включенні комп’ютера його процесор працює в реальному режимі. Після завантаження операційної системи (ОС) процесор може бути переключений програмами ОС інші режими. В реальному та віртуальному режимах використовується 16-бітна адресація з фіксованими сегментами по 64К. У захищеному режимі використовується 32х-бітна адресація з необмеженими сегментами, і адреса звертання до пам’яті формується (на апаратному рівні) за допомогою дескрипторних таблиць, в яких задаються початкові адреси сегментів, їх довжина, та права доступу до пам'яті і до портів для процесів, які їх використовують. Крім того, в захищеному режимі реалізоване апаратне переключення між задачами за допомогою спеціальних таблиць. Особливості виклику функцій API. Найбільш перспективним з точки зору програмування є захищений режим, тому що він використовує всі апаратні можливості комп’ютера. Отже, функції API для Windows відіграють ту ж саму роль, що і переривання INT 21h для DOS в реальному або віртуальному режимі, але, відмінності між ними досить суттєві, серед них: функції API не відміняють, а заміняють програмні переривання. Механізм обробки апаратних переривань залишається на рівні драйверів пристроїв; стандарт виклику функцій API грунтується на передачі параметрів через стек (а не через регістри); значення кожної функції повертається в регістрі EAX. Якщо функція повертає структуру даних, то регістр EAX містить логічну ознаку виконання, а адресу структури необхідно передати до функції як параметр; функції API працюють у захищеному режимі процесора, а переривання DOS - у реальному чи віртуальному режимі. Функції API зберігаються у різних бібліотеках динамічного компонування, які знаходяться у файлах із розширенням DLL, наприклад, kernel32.dll, user32.dll, gdi32.dll та ін. Ці файли знаходяться у системному каталозі Windows (наприклад, “C:\Windows\System”). У разі необхідності, програміст може створити DLL-файл з набором своїх функцій. Програми Windows звертаються до функцій API за допомогою команд апаратного виклику CALL, наприклад: call MessageBoxA, де MessageBoxA - 32х-бітна адреса функції. Саме ця назва функції фігурує у файлі user32.dll (подивіться редактором цей файл). Перелік можливих функцій є у файлі /tasm/lib/Import32.lib, який називається бібліотекою імпорту. Параметри для виконання будь-якої функції API перед її викликом повинні засилатися в стек, починаючи з останнього параметра (див. текст програми). Тому кожний параметр є 32х-бітним числом (в якому можуть використовуватись не всі біти). Параметрами досить часто бувають спеціальні дескриптори - хендли (handle) та атоми. Дескриптори (хендли та атоми) - це унікальні цілі числа, які Windows використовує для ідентифікації об’єктів, які створюються або використовуються в системі. Хендли займають по 4 байти, а атоми - по 2 байти. Хендли ідентифікують вікна, меню, блоки пам’яті, екземпляри програми, пристрої виводу, файли, аудіо та відео потоки, та інші об’єкти. Атоми ідентифікують стандартні іконки, курсори та об’єкти, які не змінюються при наступному завантаженні системи. Більшість дескрипторів є значеннями індексів внутрішніх таблиць, які Windows використовує для доступу та керування своїми об'єктами. Звичайно, програми користувача (ужитки) в захищеному режимі не мають прав доступу до цих таблиць. Тому, коли необхідно отримати чи змінити дані, що пов’язані з певним об’єктом Windows, застосування використовує відповідну функцію API з параметром хендла цього об’єкту. Таким чином Windows забезпечує захист своїх даних при роботі у багатозадачному режимі. ЗАВДАННЯ Реалізувати програму, що викликає Win32 API функцію згідно варіанту заданого табл. 5.1 і виводить результат її роботи на екран. Варіант №3 3. GetSystemDirectoryA  Порядок виконання лабораторної роботи №3 UINT WINAPI GetSystemDirectory( _Out_ LPTSTR lpBuffer, _In_  UINT   uSize ); LPTSTR lpBuffer- це вказівник на буфер в якому буде збережено системний шлях. UINT   uSize – це розмір буфера де буде зберігатись системний шлях Результатом буде стрічка(системний шлях) яка буде зберігатись в буфері. Лістинг програми: .586 .model flat,STDCALL option casemap :none include D:\masm32\include\windows.inc include D:\masm32\macros\macros.asm include D:\masm32\include\masm32.inc include D:\masm32\include\gdi32.inc include D:\masm32\include\user32.inc include D:\masm32\include\kernel32.inc includelib D:\masm32\lib\masm32.lib includelib D:\masm32\lib\gdi32.lib includelib D:\masm32\lib\user32.lib includelib D:\masm32\lib\kernel32.lib .data hello_message db 'Laba_5_' hello_title db 'Budim_3V',13 SystemDirectoryName db ' System directory name::',13 uSize dw 256 lpBuffer dw 256 .code Start: push offset lpBuffer push offset uSize call GetSystemDirectoryA push 40h push offset hello_title push offset hello_message push 0 call MessageBoxA push 0 call ExitProcess end Start Результат виконання програми: / Алгоритм програми: У блоці даних ми описуємо змінні та параметри які будуть передані у функцію Змінні: hello_message db 'Laba_5_' hello_title db 'Budim_3V',13 SystemDirectoryName db ' System directory name::',13 Дані змінні являються інформаційними, тобто вони підкреслюють що чим являється і хто виконав роботу. Наступні змінні виступають як параметри для функції uSize dw 256 lpBuffer dw 256 У блоці коду, за допомогою команди пуш ми заносимо у стек параметри функції : push offset lpBuffer push offset uSize call GetSystemDirectoryA – викликає Win32Api функції для отримання системної директорії, використає параметри які попередньо були занесені у стек. Наступний код формує вікно для відображення результату та завершує програму: push 40h - заносить в дані стек про стиль вікна – одна кнопка “OK” з піктограмою “І” push offset hello_title – заносить в стек адресу рядка із заголовком push offset hello_message - заносить в стек адресу рядка із повідомлення, про те хто виконав лабораторну роботу. push 0 – хендл програми-власника вікна call MessageBoxA – Виклик функції API, яка створить вікно push 0 - код виходу з програми call ExitProcess – завершення програми end Start – закінчення сегменту коду. Висновок: після виконання даної лабораторної роботи я ознайомилась з можливостями програмування на Асемблері під Windows та засвоїла навики використання функцій АРІ.
Антиботан аватар за замовчуванням

05.02.2017 16:02-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!