Структури даних для використання системних функцій

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

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

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

Рік:
2014
Тип роботи:
Звіт до лабораторної роботи
Предмет:
Системне програмування

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

Міністерство освіти і науки України Національний університет “Львівська політехніка” Кафедра АСУ Звіт до лабораторної роботи №2 з курсу « Системного програмування» на тему «Структури даних для використання системних функцій» Львів 2014 Тема – структури даних для використання системних функцій. Мета – навчитися будувати структури даних для використання функцій Win32 API при програмуванні в операційній системі Windows. ТЕОРЕТИЧНІ ПОЛОЖЕННЯ Для використання більш складних функцій API необхідно використовувати спеціальні структури даних. Вся концепція програмування в WINDOWS основана на чіткому впорядкуванні структур даних, пов'язаних із ними програм-функцій та констант-параметрів. Дані, що пов'язані з виконанням одної функції об'єднуються в блок певної довжини (він називається структурою). Елементами таких структур можуть бути інші структури і т.д. Існують структури загального користування, які не пов'язані з конкретною функцією API, а містять довідкову інформацію про систему, файли, користувача, тощо. Дані, що зберігаються в цих структурах постійно змінюються і деколи їх неможливо передбачити. Тому для отримання цих даних не можна користуватися звичайними командами читання з пам’яті типу “mov”. Перед користуванням такою динамічною інформацією необхідно перевірити, чи готова інформація для споживання. Щоб уникнути некоректності при умові паралельного виконання процесів кожне звернення до системної інформації необхідно регіструвати. Тому фактично існує два типа функцій API: а) функції, які виконують будь-яку дію; б) функції, які отримують будь-яку інформацію. У даній лабораторній роботі треба отримати та розшифрувати одну з таких довідкових структур, яка містить інформацію про системний час. Для виклику довільної довідкової функції необхідно вказати адресу місця в пам'яті, куди буде записана довідкова структура. Цю адресу, як параметр функції, завжди перед викликом функції треба опустити в стек. В лабораторній роботі необхідно також звернути увагу на те, що в програмі можна використовувати не лише функції API, але і функції різних мов програмування. Для цього необхідно, щоб в системі були присутні відповідні DLL-файли. Наприклад, можна викликати функцію виводу wsprintf, яка використовується в мові C. Ця функція передає управління до функції _wsprintfA, що міститься у файлі USER32.DLL. Функції такого типу можуть не звільняти після свого виконання стек. В такому випадку програміст сам повинен про це подбати. Отже, оскільки кожний параметр у стеку займає 4 байти, то після виклику такої функції необхідно записати add esp,4*N, де N – кількість параметрів для виконання функції (див. текст програми). Завдання Вивести інформацію про локальні диски або локальний час Код: (INC файл) include kernel32.inc include user32.inc includelib IMPORT32.LIB MB_OK equ 0h ; кнопка ОК MB_OKCANCEL equ 1h ; -\\- OK та Cancel MB_ABORTRETRYIGNORE equ 2h ; итп. MB_YESNOCANCEL equ 3h MB_YESNO equ 4h MB_RETRYCANCEL equ 5h MB_ICONHAND equ 10h ; іконка у вигляді стоп сигнала MB_ICONQUESTION equ 20h ; іконка "?" MB_ICONEXCLAMATION equ 30h ; Іконка "!" MB_ICONASTERISK equ 40h ; іконка з знаком "і" MB_ICONERROR equ MB_ICONHAND ; то саме, що MB_ICONHAND MB_ICONINFORMATION equ MB_ICONASTERISK ; то саме, що MB_ICONASTERISK MB_ICONSTOP equ MB_ICONHAND ; то саме, що MB_ICONHAND MB_ICONWARNING equ MB_ICONEXCLAMATION; то саме, що MB_ICONEXCLAMATION IDOK equ 1 ; якщо ОК IDCANCEL equ 2 ; якщо відміна (Cancel) IDABORT equ 3 ; ітп IDRETRY equ 4 IDIGNORE equ 5 IDYES equ 6 IDNO equ 7 IDCLOSE equ 8 IDHELP equ 9 .data format db 'Сьогодні (%s)',13,10 db '%02d %s %04d ' db '[%02d:%02d:%02d]',13,10,13,10 db '=<^_^>=',0 szV db 'Перерахувати існуючі диски (кнопка так)',13,10,'Визначити час (кнопка ні)',0 result db 260 dup(0) Lab_text db 'Лабораторна робота №2',0 Day_of_week db 'Неділя',4 dup(0),\ 'Понеділок',0,\ 'Вівторок',2 dup(0),\ 'Середа',4 dup(0),\ 'Четверг',3 dup(0),\ "П'ятниця",2 dup(0),\ 'Субота',0 szMonth db 'Січня',5 dup(0),\ 'Лютого',4 dup(0),\ 'Березня',3 dup(0),\ 'Квітня',4 dup(0),\ 'Травня',4 dup(0),\ "Червня",4 dup(0),\ "Липня",5 dup(0),\ "Серпня",4 dup(0),\ "Вересня",3 dup(0),\ "Жовтня",4 dup(0),\ "Листопада",0,\ "Грудня",0 szlitera db 'A:\',13,10,0 time: wYear dw 0 wMonth dw 0 wDayOfWeek dw 0 wDay dw 0 wHour dw 0 wMinute dw 0 wSecond dw 0 wMilliseconds dw 0   Код: (ASM файл) .386 .model flat,stdcall include l2.inc .code begin: push MB_YESNO+ MB_ICONQUESTION push offset Lab_text push offset szV push 0 call MessageBox cmp eax,IDYES jz @local_disk push offset time call GetLocalTime xor eax,eax mov ax,wSecond push eax mov ax,wMinute push eax mov ax,wHour push eax mov ax,wYear push eax mov ax,wMonth dec ax mov bx,10  mul bx add eax,offset szMonth push eax xor eax,eax mov ax,wDay push eax mov ax,wDayOfWeek mov bx,10 mul bx add eax,offset Day_of_week push eax push offset format push offset result call wsprintf add esp,9*4 push MB_OK + MB_ICONINFORMATION push offset Lab_text push offset result push 0 call MessageBox jmp @ex @local_disk: call GetLogicalDrives mov ecx,26 @a0: rcr eax,1 jnc @1 push ecx push eax push offset szlitera push offset result call lstrcat pop eax pop ecx @1: inc szlitera loop @a0 push MB_OK + MB_ICONINFORMATION push offset Lab_text push offset result push 0 call MessageBox @ex: call ExitProcess,0 end begin   /// Висновок: виконавши лабораторну роботу я навчився працювати з структурами.
Антиботан аватар за замовчуванням

09.04.2015 00:04-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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