Привіт і ласкаво просимо на чергову лекцію.
У цій лекції я розповім про вступ до стрибків.
Існує два види стрибків.
Безумовні стрибки, які виглядають так.
Вони використовують ключове слово jump, за яким слідує адреса, на яку має відбутися перехід.
Тому це називається безумовним стрибком, тому що стрибок є обов'язковим.
Це не залежить від жодних умов.
Другий тип переходів називається умовними переходами, і це два приклади умовних переходів.
Стрибок нуль.
Jump zero означає, що він перейде за цією адресою, якщо прапорець нуля встановлений в одиницю, а JNZ (jump not zero)
- за цією адресою.
Це означає, що він перейде за цією адресою, якщо прапорець нуля буде скинуто до нуля.
Отже, це два приклади умовних переходів.
Умовні переходи базуються на значеннях у регістрі прапорів.
Отже, в даному випадку ці два стрибки залежать від прапора Z, або нульового прапора.
JZ (jump zero) переходить тільки якщо прапорець нуля встановлений в одиницю.
Тобто, результат останнього обчислення дорівнює нулю.
Наприклад, у цій інструкції ми пересуваємо одиницю до -, а потім ви зменшуєте - на одиницю.
Так - стає нулем.
Отже, у цьому випадку, коли - стає нулем, результат цієї інструкції дорівнює нулю.
Таким чином, нульовий прапорець буде встановлено в одиницю.
Отже, коли справа дійде до цього переходу, він перейде за цією адресою, яка знаходиться тут, тому що він виявить, що нульовий прапорець
було встановлено в одиницю.
Він перестрибне сюди.
Отже, коли він перейде сюди, він додасть два до -.
Тобто - раніше був нульовим.
Тепер до - додаємо два, так що - стає двійкою.
Отже, підсумок полягає в тому, що в цьому випадку відбувається стрибок, він переходить на цю адресу, і кінцевий результат
значення в - дорівнює двом.
Тож давайте спробуємо це зараз, і відкриємо шаблонний.
А зараз ми будемо вводити інструкції на основі слайду PowerPoint.
Саме тут ми зазвичай розміщуємо наші інструкції.
Отже, перше - це переїзд - один.
Відійди.
- один. Друга інструкція - це DEC -.
Це означає зменшення - на одиницю.
Третя інструкція - стрибок на нуль.
І тут ми хочемо перейти до адреси внизу.
Але на даний момент ми не знаємо, яка це адреса, тому ми просто поставили тимчасову адресу.
Можливо, ми просто
напишемо цю адресу внизу.
Клацніть правою кнопкою миші і скопіюйте цю адресу, а потім поверніться сюди, виберіть JZ і вставте адресу туди.
У вашому випадку вона може бути іншою, тому виберіть одну адресу, яка знаходиться на достатній відстані від верхнього
рядка.
Тому я обираю 4015FA. 5015FA, яка знаходиться тут, а наступна інструкція буде пізніше.
Ми можемо змінити це, якщо виявимо, що це неправильно.
Наступний додаємо - п'ять.
Тому тут ми додамо -.
- п'ять.
А ось тут слід додати ще один - два.
Тому тут ми додаємо -.
- два.
Тепер поверніться і змініть цю адресу на цю.
Гаразд.
Це адреса, яка містить - два, тобто ось ця.
Отже, ми копіюємо цю адресу.
А потім ми повертаємося сюди і переїжджаємо за цією адресою.
І змініть це на JZ.
Гаразд.
Отже, JE еквівалентний JZ.
Саме тому x64dbg змінив його на JE.
Тож просто пам'ятайте, що коли ви бачите JE,
це означає те саме, що й JZ.
JE означає стрибок, що дорівнює нулю.
Це означає, що якщо нульовий прапорець встановлено в одиницю, то стрибок відбудеться.
Це те ж саме, що і JZ.
Але чомусь x64dbg вирішив замінити JZ на JE.
Але незважаючи на це, він все одно буде працювати.
Тож давайте запустимо його і подивимося, що станеться, коли ми переступимо через нього.
Він потрапляє в наш брейк-пойнт, і тепер ми переступаємо через нього.
Це перемістить одиницю в -.
Давай переступимо через це.
І - єдина.
Тепер зменшуємо - на одиницю.
Подивіться, що станеться з нульовим прапорцем, коли це станеться.
Тож переступайте, і ви побачите, як нульовий прапорець стає рівним одиниці, а нульовий - нулю.
Отже, результат цієї інструкції дорівнює нулю.
Саме тому нульовий прапорець встановлюється в одиницю.
А потім, коли справа дійде до цього, цей JZ або JE перевірить, чи встановлений нульовий прапорець.
Отже, у цьому випадку, оскільки нульовий прапорець встановлено в одиницю, він буде стрибати.
Тож він уникатиме цієї інструкції і стрибатиме.
Давайте переступимо і подивимось, як він стрибає.
Отже, тепер він додасть два до -, що зараз дорівнює нулю.
Тож давайте переступимо, і - це два.
Це те, що ми отримуємо тут.
- це два.
Ось як це працює.
Тож тепер ми можемо це врятувати. Клацніть файл,
виправте, виправте файл, і
ми назвемо його 31 JZ -E.
Z точка E-X-E.
Гаразд.
На цьому відео все.
Ми продовжимо в наступному відео.
Дякуємо за перегляд.