Частина 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, щоб розглянути трохи більші концепції.

У наступній лекції ми почнемо говорити про ввід.

Український:.

results matching ""

    No results matching ""