Частина 6 - Дебагування char
Сьогодні ми дебагуємо програму char. Давайте переглянемо код.
ХМДХ
#include <stdio.h>include "pico/stdlib.h"
XMDX27c006cc56b1XMDX main() { stdio_init_all();
while(1) { char x = 'x'; XMDXf86a742b2f82XMDX("%c ", x);
sleep_ms(1000); } return 0; } </pre>ХМДХ
Давайте запустимо наш дебагер.
ХМДХ
XMDX62b186897c90XMDX -w XMDX27c475ab84b0XMDX -b 16 0x03_char.XMDX58f4224c1872XMDXХМДХДавайте зробимо автоматичний аналіз.
ХМДХ
aaaaХМДХДавайте перейдемо до головної частини програми.
ХМДХ
s mainХМДХДавайте перейдемо в візуальний режим, натиснувши V і потім p двічі, щоб потрапити в добре підходящий дебагерський вигляд.
ХМДХ
</XMDX07c1fb0c54aaXMDX>ХМДХ
Ми починаємо встановлювати значення повернення головної частини програми.
ХМДХ
push {r4, lr}ХМДХМи викликаємо стандартну ініціалізацію I/O.
ХМДХ
XMDXd52fb0592f8cXMDX sym.stdio_init_allХМДХДалі ми завантажуємо форматний модифікатор %c в r4.
ХМДХ
ldr r4, [0x0000033c]ХМДХМи можемо перевірити його.
ХМДХ
:> psz @ [0x0000033c] %cХМДХДалі ми завантажуємо символ char 'x' в r1.
ХМДХ
movs r1, 0x78ХМДХХМДХhttps://www.asciitable.comХМДХ
Ви можете перевірити на сайті, що 0x78 в шістнадцятковій системі є 'x'.
Далі ми переміщаємо форматний модифікатор в r0.
ХМДХ
movs r0, r4ХМДХДалі ми здійснюємо стрибок на велику відстань до обгортки printf і виконуємо її.
ХМДХ
XMDX665cb8fe8415XMDX sym.__wrap_printf</pre>ХМДХ
Далі ми переміщаємо 250 у десятичній системі або 0xfa в шістнадцятковій системі в r0.
ХМДХ
movs r0, 0xfaХМДХДалі ми переміщаємо 250 у десятичній системі, яке ми знаємо, що після логічного зміщення вліво двічі буде 1,000 у десятичній системі або 0xfa в шістнадцятковій системі в r0.
ХМДХ
lsls r0, r0, 2ХМДХДалі ми викликаємо функцію sleep_ms.
ХМДХ
XMDX67187dbd89d6XMDX sym.sleep_msХМДХДалі ми продовжуємо цикл while нескінченно.
ХМДХ
b 0x328ХМДХУ наступному урокі ми навчимося хакувати тип даних char.