Привіт і ласкаво просимо назад.
У цьому уроці я навчу вас принципам роботи зі стрибками, а також покажу, як використовувати нову
функцію x64dbg, яка називається Trace Animate.
Тож давайте почнемо з перших принципів стрибків.
Кожен перехід має бути частиною оператора if, циклу while, циклу for або виходу з циклу.
Якщо стрибок не відповідає жодному з перерахованих вище критеріїв, то його не варто використовувати. Напрямок переходів: переходи вперед
є частиною операторів if або break.
Перехід назад або стрибки назад використовуються в циклах for або while.
Тож дозвольте мені продемонструвати вам.
Тепер перейдіть до вашого x64dbg і відкрийте одну з попередніх програм, які ми написали.
Наприклад, JS. exe, 31-JS. exe, а потім перейдіть до цієї частини нашого коду і
поставте тут точку зупинки. Клацніть правою кнопкою миші, "Точка зупинки", встановіть там перемикач точок зупинки, а потім перейдіть туди.
Зараз ми проаналізуємо це за допомогою графічного представлення.
Для цього ми можемо або клацнути правою кнопкою миші і натиснути на цей графік, або просто натиснути G, клавішу G на клавіатурі.
Після цього ви перейдете до графічного вигляду. Щоб повернутися до початкового лінійного вигляду, просто натисніть
клавішу G на клавіатурі ще раз, і ви опинитеся тут.
Отже, клавіша G на клавіатурі слугує для перемикання між графічним і лінійним виглядом.
Отже, зараз ми знаходимося в графічному поданні.
Ми можемо переходити, як зазвичай, натиснувши кнопку переходу тут, і ми бачимо, як інструкції просуваються
вперед, коли ми натискаємо цю кнопку.
І ви бачите, що всі ці стрілки рухаються вперед, опускаються вниз.
Отже, це частина інструкції if.
Ось що мається на увазі під стрибками вперед.
Переходи вперед є частиною оператора if або break, наприклад, це переходить вперед ось так.
Тепер візьмемо інший приклад.
Давай закриємо це зараз.
Погляньте на цикл.
Давай відкриємо цикл.
Скажімо, JS-цикл, 33-JS-цикл, а потім повернемося сюди і поставимо тут точку зупинки. Брейк-поінт, перемикач.
А тепер натискаємо клавішу G на клавіатурі або клацаємо правою кнопкою миші і вибираємо "Графік". І тепер у нас є графічне зображення.
А тепер ви помітите в цьому дещо інше.
Відбувається стрибок назад.
Це означає, що звідси ця синя стрілка стрибає назад.
Ви можете збільшувати і зменшувати масштаб, утримуючи клавішу Control на клавіатурі, а потім використовуючи колесо
прокрутки миші для збільшення або зменшення.
Якщо ви не можете масштабувати таким чином, ви повинні налаштувати можливість масштабування, перейшовши в Опції, Налаштування, і в розділі
Графічний інтерфейс, переконайтеся, що ця кнопка, Режим масштабування графіка, позначена.
Потім натисніть "Зберегти".
Потім ви зможете натиснути і утримувати клавішу Control та прокручувати, щоб збільшити масштаб.
Отже, тепер ви бачите, що ця синя стрілка з цього модуля, ось ця рамка, зациклюється у зворотному напрямку.
Отже, це свідчить про зациклення.
Ось що мається на увазі під стрибком назад,
який використовується
у циклах for або while. І тоді всі інші стрибають вперед.
Цей стрибок вперед.
Ця стрілка вказує вперед.
Це вперед.
Отже, це все є частиною інструкції if.
Але той, що зі стрибком назад, є частиною циклу.
Зараз я навчу вас, як робити трасування.
Ви можете створити анімацію трасування, перейшовши до пункту Трасування тут і ввімкнувши цей режим охоплення трасування.
Коли ви натиснете на нього зараз, коли ви переступите, він підсвітиться для вас.
Спочатку вам потрібно добігти до цієї локації, а потім, коли ви переступите через неї, вона підсвітить ті шляхи, якими
ви пройдете.
Якщо ви хочете, щоб анімація виконувалася автоматично, ви можете натиснути "Трасування", "Анімувати поверх", і тоді вона зробить
анімацію для вас.
Ви бачите, що анімація зациклюється, зациклюється, зациклюється, зациклюється і зациклюється, і зациклюється, і зациклюється, і зациклюється, і показує вам шлях, який
вона пройшла.
Ось що мається на увазі під трасуванням анімації.
Спробуємо ще одну.
Тож тепер давайте відкриємо цикл часу тут.
А потім перейдіть до цього, клацніть правою кнопкою миші, поставте там точку зупинки, перемкніть її, перейдіть
до точки зупинки, натисніть G, щоб перейти до графічного перегляду, а потім увімкніть підсвічування трасування, натиснувши Trace Coverage,
Trace Coverage Word, а потім Trace Animate Over.
І тепер ви бачите, що він зациклюється тут, зациклюється, зациклюється, зациклюється,
зациклюється, зациклюється, а потім, коли він закінчується, він виходить з петлі ось тут.
Тож це корисно для розуміння логіки коду.
Звичайно, ви можете також зробити це вручну - давайте спробуємо ще раз.
Перезапустіть це.
Натисни G.
Ви також можете зробити це вручну.
Спочатку ви біжите, поки не досягнете точки зупинки.
Потім ви можете вимкнути підсвічування.
Перейдіть до "Відстеження", "Покриття", "Вимкнути".
Потім підсвічування вимикається.
Оновіть його, перезапустіть, ідіть сюди, Джи.
І тепер підсвічування зникло.
Знову увімкніть підсвічування.
А потім ви можете переступити вручну, якщо бажаєте.
Запустимо його спочатку, доки він не досягне точки зупину.
Потім ви можете вручну переступити
через нього і вивчити хід логіки.
Отже, коли вона потрапляє сюди, синя стрілка стрибає назад.
Це означає, що це петля.
Дивись, як це відбувається.
Тут він стрибає назад.
Тоді переступай.
Знову стрибає назад.
Відійди.
Знову стрибок назад.
І так далі, і так далі, і так далі.
Ось як можна проаналізувати цикл.
І якщо ви хочете знати, коли він вийде з циклу, ви повинні поставити тут точку зупинки.
Щоб поставити тут крапку переривання, потрібно повернутися до лінійного вигляду, натиснувши G, а потім поставити крапку переривання
тут.
Клацніть правою кнопкою миші і поставте
там точку зупинки, а потім запустіть його.
Виділіть точку зупинки, натисніть G, і ви побачите, що вона потрапила на точку зупинки.
Таким чином, ви можете використовувати графічне представлення, а також анімацію трасування.
Повернімося до слайду.
Вкладені конструкції циклів if, for та while.
Ви також можете вкладати цикли if, for і while один в одного, але уникайте занадто глибокої вкладеності, оскільки це ускладнює
читання і розуміння коду.
Максимальне гніздо, до якого ви повинні прагнути, - два, не більше.
Далі, уникайте стрибків, які перетинаються один з одним.
Цього можна уникнути, якщо спочатку спроектувати псевдокод у високорівневій конструкції програмування, а потім
лише конвертувати його в асемблер.
Отже, високорівневі конструкції програмування - це ті речі, які ви вивчали раніше.
Наприклад, if-else - це псевдокод, тоді вам слід спочатку розробити псевдокодову форму, а потім конвертувати її в асемблер.
Не кодуйте безпосередньо на асемблері.
Те ж саме з циклами for.
Створіть свою високорівневу конструкцію програмування спочатку за допомогою псевдокоду, а потім конвертуйте її в асемблер.
Те саме з циклом while.
Спроектуйте в псевдокоді конструкцію програмування високого рівня для циклу
while, потім лише перетворіть псевдокод, і так далі.
Ось так можна уникнути перетину стрибків.
Тепер, коли у вас є всі ці підсвічування, ви можете вимкнути підсвічування, а також будь-яку налагоджувальну
інформацію, видаливши базу даних. Тож ви можете видалити базу даних.
Дозвольте мені спочатку перейти до місця, де ви встановили цю програму, x64dbg.
Для мене він знаходиться в цій папці: Program Files (x86).
Прокрутіть вниз до папки x64dbg, відкрийте Release, потім x32, відкрийте
db.
DB - це для бази даних, а потім видалити.
Виділіть все і видаліть.
Отже, коли ви видалите все тут, а потім знову відкриєте свої програми, попередні програми, в яких
було виділення, і так далі, коли ви відкриєте їх знову, ви побачите, що все виділення зникло.
Якщо у вас були вставлені коментарі, точки зупинки, вони також будуть видалені, коли ви видалите
базу даних.
Ось і всі поради, які я можу дати щодо принципів переходів, а також щодо використання анімації трасування під час
налагодження, аналізу та розуміння вашого коду.