Частина 19 – Хакінг ADDS
Для повного змісту змісту всіх уроків, будь ласка, натисніть нижче, оскільки це надасть вам короткий зміст кожного уроку, а також теми, які будуть розглянуті.
Давайте знову переглянемо наш код:
Ми знову додаємо 100 десятичне в r1, 4,294,967,295 в r2. Потім ми додаємо r1 і r2 і розміщуємо в r0.
Давайте відлагодимо:
Ми знову бачимо adds , які встановлюють флаги в CPSR. Нам потрібно пам'ятати, коли ми відлагоджується в GDB, значення CPSR знаходиться в шістнадцятковому вигляді. Для того, щоб побачити, які флаги встановлені, нам потрібно перетворити шістнадцятковий на бінарний. Це зробить сенс, коли ми почнемо відлагоджувати і хакувати цей приклад у майбутніх уроках.
Нам потрібно пам'ятати, що біти 31, 20, 29 і 28 в CPSR вказують наступне:
Біт 31 - N = Позитивний Флаг
Біт 30 - Z = Нульовий Флаг
Біт 29 - C = Флаг переносу
Біт 28 - V = Флаг переповнення
Ми бачимо CPSR в 10 шістнадцятковий. 10 шістнадцятковий в бінарному вигляді 0001.
Отже, якщо значення в бінарному вигляді було 0001 біта 31, 30, 29 і 28 (NZCV) це означало б:
Позитивний Флаг НЕ встановлений
Нульовий Флаг НЕ встановлений
Флаг переносу НЕ встановлений
Флаг переповнення встановлений
Давайте візьмемо погляд, якщо крокати знову:
Ми бачимо 4294967295 десятичне або 0xffffffff в r2. Ми знаємо, якщо крокати знову, ми викликатимемо зміну CPSR від 0001 до 0010, що означає:
Значення в бінарному вигляді 0010 біта 31, 30, 29 і 28 (NZCV) означало б:
Позитивний Флаг НЕ встановлений
Нульовий Флаг НЕ встановлений
Флаг переносу встановлений
Флаг переповнення НЕ встановлений
Ця дія встановлює флаг переносу. Однак давайте хакнемо:
Ми хакнули r2 і змінили значення на 1 десятичне і XMDX0x1 шістнадцятковий. ДОТИМ ми знаємо раніше, ніж CPSR ішов до 0010 останнього разу, але тепер, що ми хакнули цей, давайте побачимо, що відбувається з CPSR__ коли крокаємо.
БАМ! Ми хакнули його і побачили r0 є 101 і тому не викликав флаг переносу і зберіг CPSR в XMDX0x10 шістнадцятковий що означає 0001 бінарний __що означає:
Отже, якщо значення в бінарному вигляді було 0001 біта 31, 30, 29 і 28 (NZCV) це означало б:
Позитивний Флаг НЕ встановлений
Нульовий Флаг НЕ встановлений
Флаг переносу НЕ встановлений
Флаг переповнення встановлений
Важливо, щоб ви зрозуміли цей урок у повному його складі. Якщо ні, будь ласка, перегляньте останні два тижні уроки.
Наступного тижня ми вийдемо на ADC