Привіт.
З поверненням.
Давайте розглянемо ще одну конструкцію програмування високого рівня - цикли for.
Цикли корисні для ітерації над діапазоном чисел.
Наприклад, ви можете підсумувати всі числа від 0 до 9 включно.
У псевдокоді це виглядає так:
якщо - від 0 до 9, то зробити так.
І це означає, що ви використовуєте - як лічильник.
Він рахуватиме від 0 до 9, і кожного разу, коли він рахуватиме, він починатиме з нуля, потім з одиниці, потім з двійки.
Отже, кожного разу, коли він рахує, він бере значення, яке додає до -.
Отже - спочатку має бути нуль.
Отже, перший раз, коли він потрапляє в цикл, - це нуль. Нуль плюс нуль повертається до -.
Отже - нуль.
Тоді при наступному циклі - збільшиться до одиниці, а потім візьме одиницю плюс нуль і поверне її назад до -.
Так - стає одним цілим.
Тоді наступна петля, - стане двома.
Так два плюс один стає трьома, привласнюючи назад до -, і так далі.
Так він продовжує робити, поки не дійде до останньої умови, де - дорівнює дев'яти, і дев'ять буде останнім числом,
яке буде додано до -.
І нарешті, коли доходить до - стає десять, тоді ця умова є хибною, і він виходить з циклу.
Тепер, якби ви реалізували це в збірці, це виглядало б так.
Отже, ви переміщуєте нуль до - спочатку, щоб ініціалізувати його початковим значенням нуль.
- використовується як накопичення для підбиття поточного підсумку.
- призначена для лічби, тому ви будете рахувати від нуля.
Отже, ви входите в цикл for.
Цей цикл for - це просто адреса пам'яті, і коли ви вводите її, ви спочатку берете - додаєте до -,
тобто нуль плюс - і отримуєте нуль.
Підсумок дорівнює нулю.
Потім ви збільшуєте - на одиницю.
- стає одним цілим.
Потім ви порівнюєте, чи - це десять.
Це - за десять.
І якщо - ще не дорівнює десяти, ось тут внизу jump-not-equal-to-ten, він повернеться
до адреси пам'яті вгорі, яка є циклом for, а потім додасть - до - і ви
знову збільшите - на одиницю.
Потім порівняйте, чи - зараз десять.
Якщо число все ще не дорівнює десяти, цей стрибок не дорівнює, тобто не дорівнює десяти,
тому він знову повертається до циклу for.
І так продовжується до тих пір, поки не стане десять.
Тоді, коли ви порівнюєте, "стрибок-не-рівний" є хибним.
Тому він не підстрибне назад.
Він вийде з циклу.
Отже, давайте спробуємо реалізувати це у нашому x64dbg.
Отже, відкриваємо наш файл шаблону.
А тепер давайте введемо цей код тут.
Починаючи з цього місця, ми набираємо - натискаємо пробіл
- перемістити -, нуль; перемістити -, нуль; -, -;
-; -; -; INC -; порівняти - з -; потім,
що є A; і потім переходимо.
Натисни Enter.
А наступний - стрибок-не-еквівалент циклу for.
Отже, цикл for - це, власне, ось ця адреса, яка є інструкцією ADD -, -, яка є ось цією адресою.
Тож ми копіюємо його туди.
Скопіюйте цю адресу і впишіть її сюди.
Вставте туди адресу.
Тож тепер ми готові до забігу.
Отже, давайте спочатку збережемо це: File, Patch, і назвемо це
37, for-loop. exe.
Тепер ми можемо відкрити цей файл, цикл for-loop. exe і запустіть його.
Отже, спочатку ми ставимо тут точку зупинки.
Потім ми біжимо до нашої брейк-пойнту і переступаємо.
Переміщує нуль до -, переступаємо, переміщує нуль до -, переступаємо.
І тепер ми бачимо, що - і - дорівнюють нулю.
Потім додаємо - до - і зберігаємо результат у -.
Потім збільшуємо на одиницю.
Так - стає одним цілим.
Ми порівнюємо, чи дорівнює - десять.
Це не десять.
Отже, стрибок не дорівнює десяти.
Тому, оскільки воно не дорівнює десяти, воно перескакує сюди і додає.
Отже, він додасть 1 до 0, що означає - додати до -, тому він додасть його.
Тож відійди.
Тож тепер - стає одним цілим.
Приріст -, - стає рівним двом.
Порівняйте, чи є - десять.
Ні, це не так.
Тож він знову підскочить.
Тепер він додасть два до -.
Отже - тепер їх стає три.
Приріст -, - стає рівним трьом.
Порівняйте, де - це десять.
Ні.
І ти знову підстрибуєш.
Отже, ви додаєте 3 до 3.
Таким чином, ви отримуєте шість інкрементів.
- тепер стає чотирма.
Відійди.
Ще немає десятої.
Тож ви повертаєтесь назад і додаєте 4 до 6.
Отже, виходить десять.
Отже, тепер у вас десять в -.
Отже - за десять - це А. Тоді приріст -, -
стає рівним п'яти.
А потім порівняти, де - десять.
Ні.
Тож ми знову підстрибуємо.
Отже, додаємо - до -, тобто п'ять плюс A, і отримуємо F у -.
F в - це F, - для 15.
Отже, тепер приріст -, - стає шістьма.
Порівняйте, чи це десять.
Ні.
Тож вона знову підстрибує вгору і додає шість до F, і це дає 15 в -, тобто 21.
Тепер збільшимо на одиницю.
- стає сім.
Порівняйте, це - десять?
Ні.
Тож він знову підстрибує і додає сім до цього 21 тут.
Отже, ви отримуєте 1С, що дорівнює 28.
Продовжуйте підніматися.
Приріст -, - стає - - стає
вісім.
Порівняйте -.
Де десять?
Ні.
Тож стрибайте назад, додайте - до цього -, 1С.
Отже, виходить - до чотирьох.
Потім продовжуйте, збільшуючи на одиницю.
- стає дев'ять.
Порівняйте, це - десять?
Ні.
І ти знову підстрибуєш.
Візьміть цю дев'ятку,
додайте до -, до чотирьох. Це дасть вам - до D. А потім продовжуйте, збільшуючи на одиницю.
- нарешті стало десять.
А тепер порівняйте, де
десять?
Так.
Отже, оскільки це так, цей стрибок не відбудеться, якщо Z задано.
Тож ви продовжуєте йти прямо.
Отже, ви завершили
свій цикл, і тепер значення в - дорівнює 2D, а 2D в гексі
дорівнює 45.
Отже, ви щойно склали всі числа від 0 до 9 і отримали гекс 2D, який дорівнює 45.
Отже, ось як ви можете реалізувати - ось як ви можете
реалізувати цикли, використовуючи конструкцію програмування високого рівня, щоб зрозуміти логіку.
На цьому відео все.
Дякуємо за перегляд.