- •Лабораторна робота 1.
- •1. Символи.
- •2 Представлення чисел у пам’яті пеом.
- •2.1 Цілі числа. Цілі числа без знака
- •2.2 Цілі числа зі знаком
- •3 Дійсні числа.
- •3.1 Представлення дійсних чисел у двійковому нормалізованому виді.
- •3.2 Машинні формати дійсних чисел
- •3.2.1. Формат 32 біти - float (або single)
- •3.2.2. Формат 64 біти - double
- •4. Завдання на лабораторну роботу.
- •5. Методичні вказівки з оформлення звіту
- •6. Рішення типового прикладу (без оцінки похибки перетворення)
- •7. Питання для самоперевірки
- •8. Література
- •Лабораторна робота 2.
- •1. 3 Формати файлів, що виконуються, які підтримуються у fasm
- •2. Завдання на лабораторну роботу:
- •3. Методичні вказівки з оформлення звіту
- •4. Питання для самоперевірки.
- •Лабораторна робота 3.
- •1. Підготовка до роботи.
- •2. Питання для самоконтролю.
- •3. Короткі теоретичні відомості.
- •3.1 Команди пересилання даних.
- •3.1.3 Операції зі стеком:
- •3.2 Робота із налагоджувачем OllyDbg.
- •3.2.2. Розглянемо основні команди меню OllyDbg.
- •4. Завдання на лабораторну роботу.
- •9. Література
- •Лабораторна робота 4.
- •3.2. Операції із прапорами процесора:
- •3.3 Команди розповсюдження знаку
- •4. Методичні вказівки з оформлення звіту
- •5. Рішення типового прикладу.
- •6. Завдання на лабораторну роботу
- •7. Критерії оцінювання.
- •8. Питання для самоперевірки
- •9. Література
- •Лабораторна робота 5.
- •3.2. Команди зсуву
- •3.3 Команди сканування бітів
- •4. Методичні вказівки з оформлення звіту
- •5. Приклади використання бітових команд
- •6. Завдання на лабораторну роботу
- •7. Критерії оцінювання.
- •8. Питання для самоперевірки
- •9. Література
- •Лабораторна робота 6.
- •1. Підготовка до роботи.
- •2. Питання для самоконтролю.
- •3. Короткі теоретичні зведення.
- •3.1. Команди безумовної передачі управління
- •3.1.1. Команда безумовного переходу jmp
- •3.2. Команди умовної передачі управління Jcc
- •3.2.1. Перша група команд умовного переходу.
- •3.2.2 Друга група команд умовного переходу.
- •3.2.3. Третя група команд умовного переходу.
- •3.3. Команди управління циклами looPx
- •3.3.1. Команда loop — перехід по лічильнику
- •3.3.2. Команда loope (loopz) перехід по лічильнику і якщо дорівнює
- •3.3.3. Команда loopne (loopnz) перехід по лічильнику і якщо не дорівнює
- •4. Методичні вказівки з оформлення звіту
- •5. Приклади використання бітових команд
- •6. Завдання на лабораторну роботу.
- •7. Критерії оцінювання.
- •8. Питання для самоперевірки
- •9. Література
- •Лабораторна робота 7.
- •1. Підготовка до роботи.
- •2. Питання для самоконтролю.
- •3. Короткі теоретичні відомості.
- •3.1. Реалізація основних операцій по обробці масивів мовою асемблера.
- •4. Методичні вказівки з оформлення звіту
- •5. Критерії оцінювання.
- •6. Завдання на лабораторну роботу.
- •7. Питання для самоперевірки
- •8. Література
- •Лабораторна робота 8.
- •1. Підготовка до роботи.
- •2. Питання для самоконтролю.
- •3. Короткі теоретичні відомості.
- •4. Приклади виконання деяких типових задач обробки рядків
- •4. Завдання на лабораторну роботу.
- •Лабораторна робота 9.
- •1. Підготовка до роботи.
- •2. Питання для самоконтролеві.
- •3. Короткі теоретичні відомості
- •3.1. Принципи організації підпрограм
- •3.2. Параметри процедур і значення, що повертаються
- •3.3. Використання загальних перемінних у процедурах
- •3.4. Особливості fasm по організації підпрограм (Windows - додатка).
- •Лабораторна работа 10-11.
- •3.1.2. Засобу bios
- •3.2. Уведення з клавіатури
3.1.3 Операції зі стеком:
push <source> зменшує значення покажчика стекового фрейму (регістр ESP), потім копіює значення <source> у вершину стека. Операндом може бути пам'ять, регістр загального призначення, сегментний регістр або безпосереднє значення розміром у слово або подвійне слово. Якщо операнд - це безпосереднє значення і його розмір не визначений, то в 16-бітному режимі за замовчуванням він обробляється як слово, а в 32-бітному режимі як подвійне слово. Мнемоніки pushw і pushd - це варіанти цієї інструкції, що зберігають відповідно слова і подвійні слова. Допускається в одному рядку кілька операндів (розділених пробілами, а не комами).
pusha зберігає в стек уміст восьми регістрів загального призначення. У неї немає операндів. Існує дві версії цієї інструкції: 16-бітна і 32-бітна. Асемблер автоматично генерує версію, що відповідає поточному режимові, але, використовуючи мнемоніки pushaw або pushad, це можна змінити для того, щоб завжди одержувати, відповідно, 16- або 32-бітну версію. 16-бітна версія цієї інструкції зберігає регістри загального призначення в такому порядку: АХ, СХ, DX, ВХ, значення регістра SP перед тим, як був збережений АХ, далі ВР, SI і DI. 32-бітна версія зберігає еквівалентні 32-бітні регістри в тім же порядку.
pop <destination> - переводить слово або подвійне слово з поточної верхівки стека в операнд-адресат і після зменшує значення ESP на відповідне значення (2 або 4 байти). Операндом може служити пам'ять, регістр загального призначення або сегментний регістр. Мнемоніки popw і popd - це варіанти цієї інструкції, що відновлюють відповідно слова і подвійних слів. Якщо в одному рядку утримується трохи операндів, розділених пробілами, компілятор асемблює ланцюжок інструкцій з цими операндами.
popa відновлює регістри, збережені в стек інструкцією pusha, крім збереженого значення SP (або ESP), що буде зігнорований. У цієї інструкції немає операндів. Щоб асемблювати 16 або 32-бітну версію цієї інструкції, використовуйте мнемоніки “popaw” або “popad”
3.2 Робота із налагоджувачем OllyDbg.
Після завантаження OllyDbg перед користувачем з'явиться вікно (CPU Window).
3.2.1 Вікно CPU складається з п'яти частин.
Головне вікно. У цьому вікні відбувається власне саме налагодження. Всі інструкції наведені в дезасембльованому виді. Збоку виділена адреси, яка винна виконатися наступною. Між стовпчиком адреси і стовпчиком дезасембльованого лістингу є стовпчик з машинним кодом інструкції. Самий останній стовпчик містить у собі коментарі.
Дамп пам'яті. У цьому вікні відображується стан пам'яті МП
Панель стеку. У панелі стеку, можна змінити потрібні вам байти в пам'яті, ставити точку зупини та ін.
Вікно регістрів. У вікні регістрів відображаються всі 32-бітні регістри, регістри прапорів і різні інші регістри. Для того, щоб змінити регістр треба клацнути по його значенню 2 рази й увести нове значення. Змінити регістр прапора можна шляхом подвійного натиснення по одному з них.
Панель інструментів.
Перша кнопка ліворуч – „відкрити файл” [F3], потім ідуть „перезавантажити файл” [Ctrl+F2] (завантажує останній файл, що відкривався), „закрити файл” [Alt + F2], слідом - парі кнопок „виконати” - [F9]” і „пауза” [F12].
Далі за списком режими трасування:
„step in” [F7] - виконує одну команду за раз. При обробці виклику (call) передає керування у викликану підпрограму, зупиняючись на першій команді в ній.
„step over” [F8] - також виконує одну команду за раз, але при обробці виклику call намагається виконати підпрограму за один крок, не передаючи їй керування. Керування все-таки передається в підпрограму, якщо на виклик установлена точка зупинки, або в ній генеруються виняткові ситуації (переривання).
„animate” [Ctrl + F7] або [Ctrl + F8]. Щоб не натискати F7 або F8 сотні разів підряд, OllyDbg передбачає режим “анімації” Це режим автоматичного покрокового виконання. Анімація зупиняється: при натисканні [Esc], або якщо зустрічається точка зупинки або виключення.
„trace into” [Ctrl + F11] - режим схожий на анімацію, тільки вікна дебагера при цьому не обновляються, і ведуться журнали зміни регістрів, пам'яті й т. п.
„trace over” [Ctrl + F12] - ті ж, що й „trace into”, але підпрограми виконуються за один крок, як при „step over”.
„execute till RET” [Ctrl + F9] - виконувати програму до інструкції RET.