Частина 16 - Хакінг подвійного
Давайте переглянемся 0x06_double_MOD.c as.
#include <stdio.h> #include "pico/stdlib.h" int main() { stdio_init_all(); while(1) { double x = 40.55555555555555555555; printf("%.16f\n", x) sleep_ms(1000); } return 0; }
Давайте запустимо нашу відлагоджувальну систему.
radare2 -w arm -b 16 0x06_double.elf
Давайте зробимо аналіз автоматично.
aaaa
Давайте спробуємо потрапити до головної частини програми.
s main
Давайте перейдемо до візуального режиму, натиснувши V і потім p двічі, щоб потрапити до хорошого режиму відлагоджування.
Наш мікроконтролер має малендійну архітектуру, про яку ми вже говорили раніше, тому якщо ми хочемо змінити 40.5555555560000000 на 1.0, нам потрібно помістити цю вартість у зворотньому порядку байтів, тому...
0x3ff00000
Нам потрібно...
0x0000f03f
Отже, нам потрібно змінити значення в наступному місці.
wx 0x0000f03f @ 0x00000344
Усі, що залишилося зробити зараз - вийти і перетворити нашу .elf на __.uf2!
./elf2uf2/elf2uf2 0x06_double.elf 0x06_double.uf2
Під'єднайте Піко і переконайтеся, що натискаєте кнопку BOOTSEL або використовуйте налаштування, які я надав у частині 2.
cp 0x06_double.uf2 /Volumes/RPI-RP2
Давайте побачимо!
screen /dev/tty.usbmodem0000000000001
АХА!
1.0000002380000000 1.0000002380000000 1.0000002380000000 1.0000002380000000 1.0000002380000000 1.0000002380000000 1.0000002380000000 1.0000002380000000 1.0000002380000000 1.0000002380000000 1.0000002380000000 1.0000002380000000 1.0000002380000000 1.0000002380000000 1.0000002380000000
Тепер ми повинні мати хорошу розуміння даних типу C, щоб розглянути трохи більші концепції.
У наступній лекції ми почнемо говорити про ввід.
Український:.