LINUX.ORG.RU

Radare2 дизассемблирование avr

 , ,


0

1

Итак есть простая программа написанная в Arduino IDE плата Yun, камень atmega32u4 , она посылает на хардварный и софтварный UART данные. IDE её компилирует и складывает с hex файлом загрузчика (bootloader)

И вот решил я все это поизучать да заодно, с radare побаловаться на том что понимаю(ну хоть немного).

Смотрим что нам надизассемблировал radare скармливаем ему

r2 -a avr full.hex и получаем что то непонятное

|           0x00000004      3030           cpi r19, 0x00
|           0x00000006      3030           cpi r19, 0x00
|           0x00000008      3030           cpi r19, 0x00
|           0x0000000a      4339           cpi r20, 0x93
|           0x0000000c      3439           cpi r19, 0x94
|           0x0000000e      3830           cpi r19, 0x08
т.е. явно не похоже на лажу, т.к. если посмотреть то же через objdump

avr-objdump -m avr -D full.hex



     1d0:       8b e6           ldi     r24, 0x6B       ; 107
     1d2:       80 93 e8 00     sts     0x00E8, r24
     1d6:       f9 cf           rjmp    .-14            ;  0x1ca
     1d8:       80 91 5c 01     lds     r24, 0x015C
     1dc:       81 11           cpse    r24, r1
     1de:       0d c0           rjmp    .+26            ;  0x1fa
     1e0:       82 e0           ldi     r24, 0x02       ; 2
     1e2:       80 93 58 01     sts     0x0158, r24
     1e6:       84 e0           ldi     r24, 0x04       ; 4
     1e8:       80 93 59 01     sts     0x0159, r24
     1ec:       10 92 5b 01     sts     0x015B, r1
     1f0:       10 92 5a 01     sts     0x015A, r1

И что самое забавное если менять битность вручную (r2 -a avr -b 8)дизассемблирование не меняется. При компиляции программы arduino IDE б от неё можно получить elf файл(программы без бутлоадера)

И там можно встретить такие прекрасные строки

  |||||||   0x000000ac      080b           sbc r16, r24
  |||||||   0x000000ae      0002           muls r16, r16
  |||||||   0x000000b0      0202           muls r16, r18
  |||||||   0x000000b2      0100           invalid
Как может быть invalid , avr уже вдоль и поперек изучен.

архив c hex программы и hex программа + bootloader

Вопрос 1 : С какой версиии radare сломался? Пробовал git, 1.0 , 0.96. Находил пример в сети с реверсом avr.

Вопрос 2 : Как правильно писать скрипты постобработки дизассемблера. Т.е. знаю что такой то адрес это обращение к PORTB или UDRH и хочу заменить в выводе 0x1a на его имя.

★★★★★

Судя по выхлопу этот R2 хочет чистый бинарник, а не hex.

Как может быть invalid , avr уже вдоль и поперек изучен.

Это могут быть данные. Нужно смотреть на весь вывод.

alexru ★★★★
()
Последнее исправление: alexru (всего исправлений: 1)
$ echo 303030303030433934393830 | xxd -r -ps
000000C94980

Он текстовый файл принял за бинарник и начал его дизассемблировать. Ты что, не знаешь, что 0x30 == '0'?

i-rinat ★★★★★
()
Ответ на: комментарий от alexru

R2 хочет чистый бинарник, а не hex.

В общем да, невнимательный я avr-objcopy -I ihex -O binary full.hex full.bin

хоть и делал, но неправильно использую команду вывода дизассемблера. В общем строчки которые r2 интерпретирует как invalid в avr-objdump показаны так

b2: 01 00 .word 0x0001 ; ????

В общем да, первый вопрос снялся - ответ конвертация в bin.

К сожалению чтобы посмотреть всё нужно не pd вводить а pd $s, в общем это мои проблемы с навигацией.

По прежнему, интересует как и в каком виде комментировать и хранить комментарии к бинарнику. Это область функций

Usage: C[-LCvsdfm*?][*?] [...] # Metadata management

DR_SL ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Дареному коню в зубы не смотрят.))

DR_SL ★★★★★
() автор топика

И что самое забавное если менять битность вручную (r2 -a avr -b 8)дизассемблирование не меняется.

Насколько я знаю, avr это чисто 8-битная архитектура. Какой смысл что-то там менять?

Вопрос 1 : С какой версиии radare сломался? Пробовал git, 1.0 , 0.96.

Лучше всего собирать из git. cast XVilka

SZT ★★★★★
()
Ответ на: комментарий от DR_SL

hex тоже можно, только тогда надо писать ihex://file.hex. И конвертировать не надо.

По поводу навигации рекомендую использовать визуальный режим. Ну и да, последняя версия была 1.2.0.

По поводу комментариев - добавлять командой CC*, например «CC my comment» - обратите внимание на кавычки, надо ими выделять не только текст, но и команду - особенность парсера радара. Для сохранения результата можно использовать команды проектов - «P*» - «Ps» и «Po».

XVilka ★★★★★
()
Ответ на: комментарий от XVilka

А как правильно помечать области которые используются в качестве данных и их не надо дизассемблировать?

DR_SL ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.