Привіт і ласкаво просимо назад.
У цьому новому уроці ми розглянемо, як замість цього можна використовувати лічильник.
Отже, в попередньому уроці ми вручну додавали чотири і вісім.
І в цьому уроці ми спробуємо розібратися, як можна використовувати лічильник в якості прилавка.
Тож подивіться на це і дізнайтеся, як це працює.
Спочатку ми переміщуємо базову адресу на -, таким чином встановлюємо базову адресу масиву.
Потім переміщуємо нуль на -.
Отже, - це наш лічильник, і лічильник починається з нульового індексу, тому що це індекс першого елемента
масиву.
Отже, з цього моменту ми будемо використовувати - для того, щоб зробити розрахунок в офсетах.
Отже, зсув, як ви пам'ятаєте, це таке число: плюс нуль - це нульовий зсув, плюс чотири - це зсув чотири,
плюс вісім - це зсув вісім.
Отже, замість того, щоб використовувати це, жорстко кодуючи зміщення як константу, ми будемо використовувати математичний розрахунок
для обчислення зміщень.
Отже, формула - плюс - помножити на чотири.
Отже - це базова адреса.
Щоб потрапити в перший залік, ви берете - помножити на чотири.
Отже, якщо - дорівнює нулю, то нуль помножити на чотири дасть нуль.
Таким чином, перше зміщення буде базовою адресою.
Тобто обчислити ефективну адресу нульового індексу масиву.
Після цього ми зберігаємо ефективну адресу в регістрі -, а в наступній інструкції розіменовуємо його, щоб витягти значення,
яке там зберігається, і зберігаємо його в -, як зазвичай.
Далі ми повинні збільшити значення лічильника на одиницю.
Тому ми переносимо одиницю на -.
Тепер зверніть увагу, що замість використання MOV -, one, ми могли б зробити INC -, INC -.
Це означає, що ми могли б також написати, наприклад, INC -, і це також збільшить значення - на одиницю.
Тож ви можете вибрати будь-який шлях.
Тому ми переносимо одиницю в -, так що тепер індекс буде дорівнювати одиниці.
Це означає, що зараз ми посилаємося на другий елемент масиву, а інструкція, яка йде після нього, залишається
такою ж самою, як і ця.
Отже, ми використовуємо ту саму формулу, але оскільки зараз - це одиниця, коли ми беремо одиницю, множимо на
чотири, ми отримуємо зміщення, це зміщення на чотири тут.
Таким чином, це зміщення буде вказувати на другий елемент масиву, другу адресу другого елемента.
Звідси ми отримуємо чотири: один раз помножити на чотири, виходить чотири. Чотири плюс -, що є базовою адресою,
дасть вам другу адресу, 3044.
Тепер ця адреса буде зберігатися в -.
Отже, цей рядок призначений для обчислення ефективної адреси масиву з індексом one. У наступній інструкції ми розіменовуємо
регістр -, витягуємо значення, що зберігається у цьому регістрі, і зберігаємо його у регістрі
-.
Отже, цей рядок копіює значення індексу масиву one на -.
Далі нам потрібно збільшити - до двох, тому що тепер ми хочемо посилатися на третій елемент масиву,
який є індексом два.
Тому ми переходимо до -.
Таким чином, індекс масиву встановлюється рівним двом.
Тоді наступна буде такою ж, як і попередня.
Ми просто використовуємо ту саму формулу. Цього разу, оскільки - дорівнює двом, ми беремо
два, множимо на чотири, що дає вісім, і беремо вісім плюс -, що дасть нам адресу третього
елемента масиву, а саме 403048.
Отже, ми збережемо цю нову адресу в -, а потім розіменовуємо значення, що там зберігається,
і зберігаємо його в -.
Отже, це пояснення другого рішення, де ми використовуємо лічильник у поєднанні з LEA.
Тепер давайте спробуємо це всередині нашого x64dbg.
Як завжди, ми завантажимо перший шаблон, а потім перейдемо до карти пам'яті та сегменту даних.
Використовуйте цей сегмент
і введіть масив тут. Перший - нуль один, наступний - нуль два, а третій - нуль три.
Тепер ми готові до кодування.
Тож поверніться до цього рядка і введіть всі ці інструкції, починаючи з цього.
Так ми отримуємо адресу першого елемента масиву.
Отже, ми копіюємо адресу.
І набираємо MOV -, і вставляємо туди адресу.
Далі йде хід нуль -.
Отже, ми переходимо до -, нуль.
Далі ми будемо використовувати LEA -, в дужках
-, плюс -, помножимо на чотири.
Ми можемо використовувати символ зірочки для позначення множення.
Далі ми перейдемо до переміщення-,-,
розіменування -.
Далі повторюємо те саме.
Хід -, один.
Далі йде
LEA-, в дужках
-, плюс -, помножити
на чотири. А потім MOV -, і -.
Далі ми переходимо до -, два, а потім до LEA-,-.
плюс -, помножити на чотири. І, нарешті, за ним слідують MOV-,-,-.
Натисни
"ОК".
Тому просто зупиніться на секунду і перевірте, чи все ви ввели правильно.
Після того, як ви переконаєтеся, що все правильно, просто збережіть його.
Натисніть файл, файл виправлення, виправлення, а потім
тут дайте йому ім'я: 55, 55 тире LEA
loop.
Вибач.
Лічильник точка XE. 55 лічильник
XE.
Отже, у нас брейк-поінт.
Просто пробіжіть через нього і переступите.
Таким чином, він переміщує 403040, яка є базовою адресою, на -.
Далі ми перемістимо нуль на -.
Відійди. - дорівнює нулю.
Далі ми збираємося скасувати посилання - і перемістити його на -.
Отже - буде один, який йде звідси.
Потім перемістіть одиницю на -.
- тепер один.
Далі обчисліть ефективну адресу для цього зсуву.
Отже - один.
Один раз помножити на чотири - це чотири. Чотири з плюсом - це переступити, і ви отримаєте 3044, тобто цю
адресу.
Далі буде розіменування -, тобто буде розіменовано цю адресу і перенесено на -.
Отже - вже два.
Далі пересуваємо два на -.
- тепер два.
Потім він обчислить ефективну адресу для цього виразу.
Тепер - два.
Двічі по чотири - вісім. Вісім з плюсом - крок вперед. Вісім з плюсом - дасть вам 3048 дюймів
в -.
Потім вона розіменшує це посилання, щоб отримати значення три.
Тож давайте переступимо, і у нас є три.
У нас три в "-".
Ось і все. Ось так ми можемо використовувати лічильник у поєднанні з LEA.
На цьому відео все.
У наступному прикладі ми будемо використовувати цикл.
Тож до наступної зустрічі.
Можливо, ви спробуєте спочатку на собі.
На цьому відео все.
Якщо ви ще не зберегли, обов'язково збережіть.
Дякуємо за перегляд.