Привіт і ласкаво просимо назад.
Сьогодні ми розглянемо інструкції INC та DEC.
INC означає приріст, а DEC - зменшення.
Приклади МНК.
Це синтаксис інструкції INC.
Реєстр платників податків.
Реєстр може
бути будь-яким з реєстрів, які ми вивчали.
Приклад: тут ця інструкція INC збільшить джерело або регістр.
У цьому випадку він повинен
бути зареєстрований на 1, і тоді він збереже результат назад у себе, також
у регістр.
Прикладом інструкції є INC EAX.
Отже, у цьому випадку, яким би не було значення у регістрі EAX, воно збільшується на 1, а результат зберігається
назад у регістр EAX.
Приклади ОВК.
Це синтаксис інструкції DEC: DEC register.
Отже, будь-яке значення у регістрі буде зменшено на 1, а результат буде збережено назад у регістр.
Прикладом може бути DEC SI.
Пам'ятайте, що SI - це молодші два байти регістра ESI.
Отже, ви берете будь-яке значення з молодших двох байт регістра ESI, зменшуєте його на 1 і записуєте
назад у молодші два байти регістра ESI.
Зараз ми розглянемо кілька прикладів з використанням вправ x64dbg, INC і DEC.
Першою інструкцією, як завжди, буде ініціалізація початкового значення регістра EAX.
І я виділив це червоним кольором
- червоним тут, останній символ червоного
кольору - щоб попередити вас, що це насправді E, а не F.
Отже, спочатку давайте запустимо ваш x64dbg.
Відкрийте x32dbg, а потім відкрийте Шаблон 1. Натисни "Відкрити".
Тепер ми збираємося ввести всі ці інструкції.
Тож натисніть на цей рядок і натисніть клавішу пробілу, щоб почати введення.
Перша команда - MOV EAX,
0x
FF
FF FF
FE.
FF FF
FE.
Обережно.
Остання - це E, а не F. Натисни "Гаразд".
Наступна інструкція - INC EAX.
За ним йде INC AL, за ним DEC AL, за ним INC AX.
Заходьте.
За ним слідує DEC AX. Заходьте. За ним слідує INC
EAX. Заходьте. За ним слідує
INC EAX. Заходьте.
Тепер зробіть паузу і перевірте, чи правильно ви ввели всі інструкції.
Після того, як ви переконалися, що все правильно, ми можемо поставити тут точку зупинки, клацнувши правою
кнопкою миші на цьому рядку, вибравши "Точка зупинки" і "Перемикач", як я вже робив тут.
Далі просто перейдіть до цієї точки зупинки, натиснувши кнопку Виконати.
Потім ми будемо переступати, поки не дійдемо до цієї лінії.
Перша інструкція - перемістити це значення в EAX, яким тут є цей регістр.
Це просто ініціалізація початкового значення в EAX, щоб ми могли виконувати деякі операції збільшення, інкременту
та декременту.
Отже, ми переходимо до наступного кроку і підтверджуємо, що тепер EAX містить це значення.
Вона має закінчуватися на "Е", пам'ятаєте?
Потім ми збільшимо EAX на 1.
Але давайте спочатку спробуємо з нашим калькулятором.
Отже, запустіть калькулятор програміста і введіть це початкове значення EAX, яке
- переконайтеся, що ви відзначили - клацніть на опцію Hex і введіть FFFFFFFFE.
Ось так.
Отже, це чотири байти.
Це один байт, за ним йде другий байт,
за ним третій байт, за ним четвертий байт.
Отже, чотири байти.
Пам'ятайте, що ми маємо справу з чотирибайтовими регістрами, або 32-бітними.
Тож тепер ми це зробили.
Ми збираємося оформити МНК.
Це означає, що ми додамо до цього числа 1.
Отже, це плюс 1 до нього плюс 1 дорівнює, і ми отримуємо таке значення: FFFFFFFFF.
Тож давайте переступимо через цю інструкцію і подивимося, що тут відбувається.
Слідкуйте за останнім "е" тут.
Відійди.
І дійсно, ми отримуємо той результат, на який розраховували.
Наступна інструкція - INC AL.
Пам'ятайте, що AL - це перший байт регістра EAX.
Це означає, що ми збільшимо на 1 тільки цей перший байт.
Тож вона повинна бути обгорнута навколо.
Це означає, що результат не перезапише інші байти над ним, оскільки наше джерело - лише один байт.
Тож тепер ми переходимо до INC AL на 1.
Тож давайте подивимося, що станеться, коли ми це зробимо.
Коли ми додаємо
1, то отримуємо 00.
Так.
Просто ігноруйте всі вищі і вищі значення.
Отже, ми повинні бачити тут FFFFFFF00.
Отже, давайте переступимо,
і дійсно, ми побачимо тут 00, тому що всі старші біти не зачеплені.
Впливає лише перший байт.
Ось чому він обертається лише на першому байті, як ми вивчали у багатьох попередніх уроках.
Тепер наступна команда зменшить AL на 1.
Отже, AL - це знову лише перший байт.
Це означає, що нас цікавить лише це - з 00.
Тому ми можемо просто очистити це поле і ввести 0.
А тепер ми зменшимо 0 на 1.
Отже, коли ми віднімемо 1, то отримаємо FF.
Тож давайте подивимося, як це відбувається зараз.
Цей 00 стане FF. Переступи через це.
І дійсно, ми отримуємо FF, ігноруючи всі старші байти, обмежуючись лише цим першим байтом.
Далі ми збільшимо AX регістра EAX.
Отже, як ви пам'ятаєте, AX - це молодші два байти регістра EAX, який посилається на
FF FF.
Ми збираємося збільшити цю суму.
Тож давайте очистимо це і просто наберемо FFFF.
Отже, тут два байти - один байт і два байти.
Отже, два байти.
Знову ж таки, AX - це лише половина регістра EAX, молодші два байти,
тому він буде обгорнутий навколо молодших двох байт.
Отже, коли ми збільшимо цей параметр, це не вплине на старші байти, лише на перші два байти.
Тож тепер ми збираємося збільшувати.
Отже, ми плюс 1.
Дорівнює, і ми отримуємо це значення.
Але нас цікавлять лише два байти, тому цей 1 буде відкинуто.
Отже, ми очікуємо отримати 0000 для цих двох молодших байт.
Тож давайте зробимо це зараз і подивимося, що станеться, коли ми переступимо.
І дійсно, ми отримуємо FFFF0000.
Далі, ми збираємося
- далі ми збираємося зменшити AX.
Це означає, що ми зменшимо ці два байти на 0000.
Отже, тепер у нас є - давайте ввімкнемо це зараз - 00:00.
Тепер ми зменшимо його на 1.
Отже, мінус 1. Ми отримуємо FFFF. Ми просто ігноруємо всі старші байти, тому що наш AX адресує
тільки перші два байти регістра EAX.
Тож ми очікуємо, що FFFF приїде сюди.
Тож давайте переступимо через це зараз і подивимося, як це відбувається.
Це правда, у нас тут є FFFFFFF.
Наступна команда збільшить весь регістр на 1.
Тому зараз видалимо це і введемо FF FF FF
FF FF.
FF FF
FFFF.
Отже, тепер у вас є чотири байти.
Це чотири байти регістру, і ми збільшимо їх на 1.
Отже, плюс 1, і ми отримуємо 1, за яким слідують вісім нулів.
Ми просто відкидаємо цю 1, тому що наш регістр EAX має лише чотири байти, тому ми повинні
очікувати, що всередині нього будуть лише нулі, тобто чотири байти.
Пам'ятайте, це один байт, другий байт, третій байт, четвертий байт.
Отже, ми отримуємо лише чотири байти.
Тепер давайте збільшимо EAX і подивимося, що відбувається.
І справді, ми отримуємо всі нулі.
Далі ми знову збільшимо EAX на 1.
Отже, припустимо, що зараз у нас є всі нулі, а тепер ми переходимо до плюс 1.
Тепер, звичайно, ми отримаємо 1.
Тепер ми збільшуємо це значення на 1.
Маємо 1.
Таким чином, ми можемо виконувати операції INC та DEC в реєстрах. Тож ми можемо зберегти це зараз,
якщо хочете. Натисни "Файл". Ми його залатаємо. Натисніть Файл
виправлення, а потім дайте йому
ім'я: 05_INC _DEC. EXE, а потім натисніть кнопку Зберегти.
Натисніть
Гаразд, і це все для цього відео.
Дякуємо за перегляд.