WEBVTT

00:00.470 --> 00:01.950
Привіт і ласкаво просимо назад.

00:01.970 --> 00:06.020
Сьогодні ми розглянемо інструкції INC та DEC.

00:06.200 --> 00:11.060
INC означає приріст, а DEC - зменшення.

00:13.130 --> 00:14.510
Приклади МНК.

00:14.990 --> 00:18.320
Це синтаксис інструкції INC.

00:18.500 --> 00:20.140
Реєстр платників податків.

00:20.440 --> 00:21.170
Реєстр може

00:21.170 --> 00:24.470
бути будь-яким з реєстрів, які ми вивчали.

00:25.640 --> 00:32.930
Приклад: тут ця інструкція INC збільшить джерело або регістр.

00:32.930 --> 00:34.850
У цьому випадку він повинен

00:36.720 --> 00:43.230
бути зареєстрований на 1, і тоді він збереже результат назад у себе, також

00:43.560 --> 00:45.120
у регістр.

00:46.380 --> 00:49.800
Прикладом інструкції є INC EAX.

00:50.940 --> 01:00.180
Отже, у цьому випадку, яким би не було значення у регістрі EAX, воно збільшується на 1, а результат зберігається

01:00.180 --> 01:02.940
назад у регістр EAX.

01:05.760 --> 01:06.990
Приклади ОВК.

01:07.620 --> 01:12.120
Це синтаксис інструкції DEC: DEC register.

01:12.870 --> 01:23.010
Отже, будь-яке значення у регістрі буде зменшено на 1, а результат буде збережено назад у регістр.

01:23.550 --> 01:25.620
Прикладом може бути DEC SI.

01:25.620 --> 01:33.000
Пам'ятайте, що SI - це молодші два байти регістра ESI.

01:34.440 --> 01:45.540
Отже, ви берете будь-яке значення з молодших двох байт регістра ESI, зменшуєте його на 1 і записуєте

01:45.540 --> 01:50.550
назад у молодші два байти регістра ESI.

01:52.940 --> 01:59.570
Зараз ми розглянемо кілька прикладів з використанням вправ x64dbg, INC і DEC.

01:59.960 --> 02:07.460
Першою інструкцією, як завжди, буде ініціалізація початкового значення регістра EAX.

02:07.880 --> 02:10.370
І я виділив це червоним кольором

02:10.400 --> 02:13.310
- червоним тут, останній символ червоного

02:13.340 --> 02:17.990
кольору - щоб попередити вас, що це насправді E, а не F.

02:18.020 --> 02:20.410
Отже, спочатку давайте запустимо ваш x64dbg.

02:20.930 --> 02:27.530
Відкрийте x32dbg, а потім відкрийте Шаблон 1. Натисни "Відкрити".

02:31.270 --> 02:34.540
Тепер ми збираємося ввести всі ці інструкції.

02:34.930 --> 02:42.340
Тож натисніть на цей рядок і натисніть клавішу пробілу, щоб почати введення.

02:42.460 --> 02:45.730
Перша команда - MOV EAX,

02:46.340 --> 02:46.610
0x

02:46.680 --> 02:46.960
FF

02:46.970 --> 02:47.440
FF FF

02:47.450 --> 02:48.260
FE.

02:48.830 --> 02:49.190
FF FF

02:49.190 --> 02:49.690
FF FF

02:49.720 --> 02:50.620
FE.

02:51.990 --> 02:52.530
Обережно.

02:52.560 --> 02:55.770
Остання - це E, а не F. Натисни "Гаразд".

02:56.830 --> 03:01.540
Наступна інструкція - INC EAX.

03:02.440 --> 03:11.260
За ним йде INC AL, за ним DEC AL, за ним INC AX.

03:11.660 --> 03:12.430
Заходьте.

03:13.750 --> 03:18.160
За ним слідує DEC AX. Заходьте. За ним слідує INC

03:18.190 --> 03:20.710
EAX. Заходьте. За ним слідує

03:20.740 --> 03:22.240
INC EAX. Заходьте.

03:23.800 --> 03:29.290
Тепер зробіть паузу і перевірте, чи правильно ви ввели всі інструкції.

03:30.280 --> 03:36.160
Після того, як ви переконалися, що все правильно, ми можемо поставити тут точку зупинки, клацнувши правою

03:36.160 --> 03:41.080
кнопкою миші на цьому рядку, вибравши "Точка зупинки" і "Перемикач", як я вже робив тут.

03:41.680 --> 03:45.760
Далі просто перейдіть до цієї точки зупинки, натиснувши кнопку Виконати.

03:46.810 --> 03:50.230
Потім ми будемо переступати, поки не дійдемо до цієї лінії.

03:50.620 --> 03:56.710
Перша інструкція - перемістити це значення в EAX, яким тут є цей регістр.

03:58.030 --> 04:06.730
Це просто ініціалізація початкового значення в EAX, щоб ми могли виконувати деякі операції збільшення, інкременту

04:06.730 --> 04:08.440
та декременту.

04:09.710 --> 04:14.840
Отже, ми переходимо до наступного кроку і підтверджуємо, що тепер EAX містить це значення.

04:15.620 --> 04:17.600
Вона має закінчуватися на "Е", пам'ятаєте?

04:18.830 --> 04:21.530
Потім ми збільшимо EAX на 1.

04:21.710 --> 04:25.070
Але давайте спочатку спробуємо з нашим калькулятором.

04:25.100 --> 04:34.280
Отже, запустіть калькулятор програміста і введіть це початкове значення EAX, яке

04:34.280 --> 04:43.430
- переконайтеся, що ви відзначили - клацніть на опцію Hex і введіть FFFFFFFFE.

04:44.150 --> 04:44.890
Ось так.

04:44.900 --> 04:46.490
Отже, це чотири байти.

04:46.880 --> 04:50.870
Це один байт, за ним йде другий байт,

04:52.030 --> 04:56.800
за ним третій байт, за ним четвертий байт.

04:56.980 --> 04:58.180
Отже, чотири байти.

04:58.270 --> 05:03.280
Пам'ятайте, що ми маємо справу з чотирибайтовими регістрами, або 32-бітними.

05:04.150 --> 05:05.890
Тож тепер ми це зробили.

05:05.920 --> 05:08.200
Ми збираємося оформити МНК.

05:08.920 --> 05:11.350
Це означає, що ми додамо до цього числа 1.

05:11.740 --> 05:22.600
Отже, це плюс 1 до нього плюс 1 дорівнює, і ми отримуємо таке значення: FFFFFFFFF.

05:22.780 --> 05:26.540
Тож давайте переступимо через цю інструкцію і подивимося, що тут відбувається.

05:26.560 --> 05:27.940
Слідкуйте за останнім "е" тут.

05:28.750 --> 05:29.680
Відійди.

05:29.680 --> 05:34.660
І дійсно, ми отримуємо той результат, на який розраховували.

05:35.740 --> 05:37.960
Наступна інструкція - INC AL.

05:38.710 --> 05:43.840
Пам'ятайте, що AL - це перший байт регістра EAX.

05:44.020 --> 05:49.180
Це означає, що ми збільшимо на 1 тільки цей перший байт.

05:49.510 --> 05:52.840
Тож вона повинна бути обгорнута навколо.

05:52.870 --> 06:01.210
Це означає, що результат не перезапише інші байти над ним, оскільки наше джерело - лише один байт.

06:02.260 --> 06:05.650
Тож тепер ми переходимо до INC AL на 1.

06:05.650 --> 06:07.510
Тож давайте подивимося, що станеться, коли ми це зробимо.

06:07.780 --> 06:09.250
Коли ми додаємо

06:10.540 --> 06:14.080
1, то отримуємо 00.

06:14.440 --> 06:15.100
Так.

06:15.400 --> 06:18.370
Просто ігноруйте всі вищі і вищі значення.

06:18.760 --> 06:23.050
Отже, ми повинні бачити тут FFFFFFF00.

06:23.920 --> 06:25.900
Отже, давайте переступимо,

06:25.990 --> 06:30.790
і дійсно, ми побачимо тут 00, тому що всі старші біти не зачеплені.

06:31.090 --> 06:32.680
Впливає лише перший байт.

06:32.680 --> 06:39.220
Ось чому він обертається лише на першому байті, як ми вивчали у багатьох попередніх уроках.

06:40.570 --> 06:44.920
Тепер наступна команда зменшить AL на 1.

06:44.920 --> 06:47.500
Отже, AL - це знову лише перший байт.

06:47.530 --> 06:51.250
Це означає, що нас цікавить лише це - з 00.

06:51.430 --> 06:54.160
Тому ми можемо просто очистити це поле і ввести 0.

06:54.400 --> 06:59.350
А тепер ми зменшимо 0 на 1.

06:59.350 --> 07:05.020
Отже, коли ми віднімемо 1, то отримаємо FF.

07:05.860 --> 07:07.660
Тож давайте подивимося, як це відбувається зараз.

07:07.720 --> 07:11.020
Цей 00 стане FF. Переступи через це.

07:11.020 --> 07:17.200
І дійсно, ми отримуємо FF, ігноруючи всі старші байти, обмежуючись лише цим першим байтом.

07:18.460 --> 07:24.430
Далі ми збільшимо AX регістра EAX.

07:24.430 --> 07:34.330
Отже, як ви пам'ятаєте, AX - це молодші два байти регістра EAX, який посилається на

07:34.360 --> 07:35.200
FF FF.

07:35.440 --> 07:37.270
Ми збираємося збільшити цю суму.

07:37.270 --> 07:41.740
Тож давайте очистимо це і просто наберемо FFFF.

07:42.040 --> 07:47.020
Отже, тут два байти - один байт і два байти.

07:47.020 --> 07:48.370
Отже, два байти.

07:49.150 --> 07:53.650
Знову ж таки, AX - це лише половина регістра EAX, молодші два байти,

07:53.650 --> 07:58.000
тому він буде обгорнутий навколо молодших двох байт.

07:58.870 --> 08:03.760
Отже, коли ми збільшимо цей параметр, це не вплине на старші байти, лише на перші два байти.

08:04.270 --> 08:05.830
Тож тепер ми збираємося збільшувати.

08:05.830 --> 08:07.030
Отже, ми плюс 1.

08:08.250 --> 08:10.320
Дорівнює, і ми отримуємо це значення.

08:10.620 --> 08:15.860
Але нас цікавлять лише два байти, тому цей 1 буде відкинуто.

08:15.870 --> 08:21.210
Отже, ми очікуємо отримати 0000 для цих двох молодших байт.

08:21.630 --> 08:24.810
Тож давайте зробимо це зараз і подивимося, що станеться, коли ми переступимо.

08:24.810 --> 08:28.590
І дійсно, ми отримуємо FFFF0000.

08:29.280 --> 08:30.600
Далі, ми збираємося

08:30.960 --> 08:33.210
- далі ми збираємося зменшити AX.

08:33.960 --> 08:38.970
Це означає, що ми зменшимо ці два байти на 0000.

08:39.510 --> 08:45.330
Отже, тепер у нас є - давайте ввімкнемо це зараз - 00:00.

08:45.480 --> 08:48.660
Тепер ми зменшимо його на 1.

08:48.780 --> 08:59.640
Отже, мінус 1. Ми отримуємо FFFF. Ми просто ігноруємо всі старші байти, тому що наш AX адресує

08:59.640 --> 09:02.610
тільки перші два байти регістра EAX.

09:02.760 --> 09:06.720
Тож ми очікуємо, що FFFF приїде сюди.

09:07.260 --> 09:10.150
Тож давайте переступимо через це зараз і подивимося, як це відбувається.

09:10.180 --> 09:12.940
Це правда, у нас тут є FFFFFFF.

09:13.690 --> 09:17.560
Наступна команда збільшить весь регістр на 1.

09:17.560 --> 09:22.120
Тому зараз видалимо це і введемо FF FF FF

09:24.240 --> 09:25.090
FF FF.

09:25.190 --> 09:25.550
FF FF

09:25.850 --> 09:26.740
FFFF.

09:26.920 --> 09:28.690
Отже, тепер у вас є чотири байти.

09:29.200 --> 09:34.960
Це чотири байти регістру, і ми збільшимо їх на 1.

09:35.260 --> 09:40.330
Отже, плюс 1, і ми отримуємо 1, за яким слідують вісім нулів.

09:41.140 --> 09:46.330
Ми просто відкидаємо цю 1, тому що наш регістр EAX має лише чотири байти, тому ми повинні

09:46.330 --> 09:51.220
очікувати, що всередині нього будуть лише нулі, тобто чотири байти.

09:51.820 --> 09:59.080
Пам'ятайте, це один байт, другий байт, третій байт, четвертий байт.

09:59.080 --> 10:00.970
Отже, ми отримуємо лише чотири байти.

10:01.690 --> 10:04.930
Тепер давайте збільшимо EAX і подивимося, що відбувається.

10:05.080 --> 10:07.180
І справді, ми отримуємо всі нулі.

10:07.630 --> 10:10.450
Далі ми знову збільшимо EAX на 1.

10:10.450 --> 10:16.630
Отже, припустимо, що зараз у нас є всі нулі, а тепер ми переходимо до плюс 1.

10:16.650 --> 10:18.700
Тепер, звичайно, ми отримаємо 1.

10:18.820 --> 10:21.100
Тепер ми збільшуємо це значення на 1.

10:21.700 --> 10:23.090
Маємо 1.

10:23.480 --> 10:31.820
Таким чином, ми можемо виконувати операції INC та DEC в реєстрах. Тож ми можемо зберегти це зараз,

10:31.820 --> 10:39.170
якщо хочете. Натисни "Файл". Ми його залатаємо. Натисніть Файл

10:39.170 --> 10:43.760
виправлення, а потім дайте йому

10:45.010 --> 10:53.590
ім'я: 05_INC _DEC. EXE, а потім натисніть кнопку Зберегти.

10:55.510 --> 10:55.840
Натисніть

10:55.840 --> 10:58.810
Гаразд, і це все для цього відео.

10:59.110 --> 11:00.670
Дякуємо за перегляд.
