Привіт і ласкаво просимо назад.
На цій лекції ми поговоримо про виконання вправи.
Тому я створив для вас вправу, яка називається LODS
Adder.
Нехай у вас є масив цілих чисел, що містить наступні числа: 4, 3, 6, 22
і 5.
Використовуйте цикл for та інструкцію LODS D, щоб підсумувати ці числа і зберегти їх у регістрі -.
Тепер, щоб виконати це завдання, вам потрібно відкрити x64dbg, а потім зберегти
ці числа в сегменті даних пам'яті: 4, 6, 22 і 5.
І кожному з них ви повинні виділити слово.
Далі слід використати цикл for.
Отже, ми вже вчилися зациклюватися раніше.
Ось короткий екскурс у минуле.
Наприклад, ось тут, швидке повторення для вас.
Це високорівнева концепція циклу for, а це реалізація мовою асемблера.
Тож якщо ви забули про це, будь ласка, поверніться до попередніх уроків, щоб використати
це для циклу, модифікованого для виконання цієї вправи.
Тому просто поставте відео на паузу на деякий час, а потім спробуйте самостійно.
З поверненням.
Сподіваюся, ви спробували.
І ось моє рішення.
Отже, я відкрию свій x64dbg, а потім перейду до цього рядка і видалю ці інструкції.
Отже, спочатку ми перенесемо нуль на -.
- буде акумулятором, який зберігає суму.
А потім у нас також буде - для зберігання самого масиву.
А масив знаходиться за цією адресою:
00403050.
Ви переходите на карту пам'яті, переходите на сегмент даних, і ви можете побачити масив тут, починаючи з 00403050.
У вас є три слова.
Перше слово - 436.
Друге слово - 22, а третє слово - 5.
Отже, раз, два, три.
Отже, це масив з трьох цілих чисел, а далі йде лічильник, який рахує, скільки разів ви проходите
цикл.
А LODS D завантажує масив з кожного з цих місць у -, а потім кожного разу, коли він завантажується, ви будете додавати його до загальної
кількості, до загальної кількості -. Потім ви зменшуєте лічильник і перевіряєте, чи дорівнює
він нулю.
Якщо - не дорівнює нулю, ви продовжуєте цикл за цією адресою і продовжуєте цикл до тих пір, поки - не стане рівним
нулю.
Отже, давайте поставимо тут точку зупинки і запустимо її.
Б'ємо брейк-пойнт, переступаємо, пересуваємо нуль на -, - готуємося.
Потім ми переміщуємо цю адресу масиву, початок масиву, 00403050, на -.
Отже - початок масиву покладено.
Далі ми переносимо 3 в -, щоб лічильник був ініціалізований на 3, тому що нам потрібно пройти цикл тричі.
Тепер ми називаємо LODS D.
Тож подивіться - після LODS D. Він перешле цю адресу на чотири байти, і вона стане
403054.
І ось воно тут.
Отже, після того, як ви зателефонуєте до LODS D, ви перейдете за цією адресою, а саме: 00403054. Відійдіть, і тепер він пересунув
-адресу на чотири байти вперед.
Отже, він переходить звідси сюди, до наступного елемента масиву.
Отже, це перший елемент, це другий елемент.
При цьому в нього також завантажується значення 436, яке прийшло з першого елемента
масиву.
Пам'ятайте, що це малий ендіан,
тому коли ви прочитаєте його в -, він завантажить його у зворотному порядку, і стане 436.
Тому, коли ви вводите ці значення, вам потрібно вводити
їх у зворотному порядку, тобто 36 04. Далі він додасть це - до -.
Тож давайте переступимо, і тепер - стає 436.
Потім зменшується - на одиницю. Переступити,
- стає 2.
Він перевіряє, чи дорівнює - нулю. Це не так, тому
він підскочить вгору, а потім завантажить наступне значення, тобто 22, у -, і далі - на dword.
Тож давай переступимо.
Отже, тепер він завантажує 22 у -, і пересилає його до іншого слова. Це означає, що він перенаправив його сюди.
Отже, зараз він знаходиться на третьому елементі масиву.
Далі ми візьмемо це 22 і додамо його до -.
Тож переступайте, - тепер стає 458.
Потім зменшується - на одиницю. Переступити,
- тепер стає 1.
Він перевіряє, чи дорівнює - нулю. Це не так, тому
він знову зациклиться.
Відійди. Тепер це повториться знову.
Отже, цього разу він завантажить третій елемент масиву, який дорівнює 5, у -.
Тож відійди.
Тепер 5 у -. У той же час, - тепер знаходиться за межами масиву.
Він пройшов ось тут,
отже, ви вже за межами масиву.
Тепер він додасть ці 5 до -. Переступаємо, і ось - стає 45D. Він зменшиться на одиницю. Переступити, -
стає нулем.
Тепер він перевіряє: чи дорівнює нулю?
Так, тому
він вийде з циклу.
Виходьте з циклу.
Отже, тепер ваш - буде містити суму трьох елементів масиву, яка дорівнює 45D, і ми
можемо підтвердити це, перевіривши на калькуляторі. Вводимо 436-436 плюс 22 плюс 5 і отримуємо 45D. Отже - є 45 D, значить програма
працює.
Тож це рішення для цієї вправи.
Сподіваюся, вам вдалося зробити це правильно.
Тож дякуємо за перегляд.