Полная версия этой страницы:
как считать программу с AVR?
coolibin
Dec 24 2007, 08:16
можно ли превратить код записаный в АТмега8 обратно в ASM? и, если да, то как это сделать?
Цитата(coolibin @ Dec 24 2007, 11:16)

можно ли превратить код записаный в АТмега8 обратно в ASM? и, если да, то как это сделать?
Если не залочен - считать программатором и загрузить полученный файл в аврстудию или IDA тоже умеет авр дизассемблировать
coolibin
Dec 24 2007, 09:04
Я, извиняюсь, залочен это типа запрет на считывание? А счиывать программатором через avreal32?
Цитата(coolibin @ Dec 24 2007, 12:04)

Я, извиняюсь, залочен это типа запрет на считывание?
Да если LOCK bits установлены то флеш не прочитать будет.
Цитата(coolibin @ Dec 24 2007, 12:04)

А счиывать программатором через avreal32?
Ну это смотря какой у вас программатор. Обычно тем софтом, которым шьете можно и обратно прочитать.
Совсем недавно возникла такая задача. Попробовал IDA - ужаснулся. Обилие совершенно непонятных настроек, нелогичная навигация по коду (ScrollBar работает непонятно как), половина кода вообще не была сконвертирована, а осталась как .dw ...
Вобщем, не смог даже сохранить нормально файл ассемблированый.
Дальше нашел программу ReAVR - все просто и понятно, так что рекомендую!
coolibin
Dec 24 2007, 10:12
Спасибо!
coolibin
Jan 9 2008, 08:00
А почему он не заменяет константы на имена портов? и где находится сегмент данных(.dseg)? имхо, если известны данные легче разбиратся с программой)))
Maik-vs
Jan 9 2008, 14:53
Цитата(coolibin @ Jan 9 2008, 11:00)

А почему он не заменяет константы на имена портов? и где находится сегмент данных(.dseg)? имхо, если известны данные легче разбиратся с программой)))
А откуда он узнает, как Вы привыкли называть 38-ю ячейку памяти?
В редактор, "найти - заменить все"...
Потом дебаггер, точки входа 0-й адрес или другие, в зависимости от fuses "BLB" контроллера. И вперёд.
Цитата(coolibin @ Jan 9 2008, 11:00)

А почему он не заменяет константы на имена портов? и где находится сегмент данных(.dseg)? имхо, если известны данные легче разбиратся с программой)))
Так для этого и нужна IDA, там можно все это сделать, и навигация по коду будет очень удобная, перекресные ссылки...
coolibin
Jan 10 2008, 07:50
Цитата(Maik-vs @ Jan 9 2008, 16:53)

А откуда он узнает, как Вы привыкли называть 38-ю ячейку памяти?
...
Например, значение PORTD для atmega16 известно, он(ReAVR) мог бы и подставить!
Цитата(KRS @ Jan 10 2008, 09:22)

Так для этого и нужна IDA, там можно все это сделать, и навигация по коду будет очень удобная, перекресные ссылки...
А .dseg? .dseq IDA покажет?
coolibin
Jan 10 2008, 09:23
а где скачать IDA? а то я скачал, а она для мобилок(
http://ida470.narod.ru/ правда старенькая , но для авра выше крыши
Maik-vs
Jan 10 2008, 10:38
Цитата(coolibin @ Jan 10 2008, 10:50)

Например, значение PORTD для atmega16 известно, он(ReAVR) мог бы и подставить!
А .dseg? .dseq IDA покажет?
Ну, если будет знать, что это для меги16, то таки да.
Вы знаете, замена констант - это 2% от всей работы. Вам же надо понять алгоритм, да? А понятных названий для регистров нет, для ячеек памяти нет; где массив, где переменная? Программа писалась на С или ассемблере или ещё на чём? Всё это нужно сделать головой и руками в процессе копания в коде. И никакая IDA Вам тут не поможет. Так что успехов в труде.
Не всегда нужно разобраться в алгоритме, часто просто надо поменять какую-нибудь константу. В моем случае надо было самодельный AVR JTAG заставить работать с нестандартным кварцем. Нашел где записывается регистр UBRR, нашел таблицу значений битрейтов, поменял - и все работает!
coolibin
Jan 11 2008, 08:28
Ладно, с константами согласен можно и ручками, а вот данные, строки текста, например, ох как помогают в разборе программы, а ReAVR их походу не распознает((((
Цитата(coolibin @ Jan 11 2008, 11:28)

Ладно, с константами согласен можно и ручками, а вот данные, строки текста, например, ох как помогают в разборе программы, а ReAVR их походу не распознает((((
Вам надо разобраться с IDA, даже там где она не распознает строки, Вы можете указать тип данных...
coolibin
Jan 11 2008, 13:13
После дизассемблирования в ReAVR в коде присутсвует много непонятных блоков, например:
.dw 0xFFFF ; pc=0x0180(0x0300)
.dw 0xFFFF ; pc=0x0181(0x0302)
adiw r26,k13
ld r16,X
sbiw r26,k13
ret
;----------------------*
; pc=0x186(0x30C)
;
.dw 0xFFFF ; pc=0x0186(0x030C)
.dw 0xFFFF ; pc=0x0187(0x030E)
adiw r26,k12
ld r16,X
ldi r17,k0A
mul r16,r17
mov r16,r0
mov r17,r1
sbiw r26,k12
ret
...интересно, что это такое?
IgorKossak
Jan 11 2008, 21:43
Цитата(coolibin @ Jan 11 2008, 15:13)

После дизассемблирования в ReAVR в коде присутсвует много непонятных блоков, например:
...интересно, что это такое?
Это могут быть пустые места, заполненные по умолчанию значением 0xFFFF или блоки данных, инкапсулированные в код.
Вообще то процесс дизассемблирования является итерационным и в общем случае многопроходным.
IDA многие вещи делает автоматически или, по крайней мере, полуавтоматически.
ReAVR же, при кажущейся своей простоте, требует гораздо больше работы руками, именно в плане определения блоков данных. Не говоря уже о том, что он не подставляет символические имена регистров внутренней периферии.
Если программа на Ваш взгляд достаточно большая, то не поленитесь потратить время на изучение IDA. Окупится сторицей.
coolibin
Jan 12 2008, 07:27
Цитата(IgorKossak @ Jan 11 2008, 23:43)

Это могут быть пустые места, заполненные по умолчанию значением 0xFFFF или блоки данных, инкапсулированные в код.
Вообще то процесс дизассемблирования является итерационным и в общем случае многопроходным.
IDA многие вещи делает автоматически или, по крайней мере, полуавтоматически.
ReAVR же, при кажущейся своей простоте, требует гораздо больше работы руками, именно в плане определения блоков данных. Не говоря уже о том, что он не подставляет символические имена регистров внутренней периферии.
Если программа на Ваш взгляд достаточно большая, то не поленитесь потратить время на изучение IDA. Окупится сторицей.
Спасибо!
ishvedov
Jan 15 2008, 21:53
Цитата(coolibin @ Jan 9 2008, 12:00)

А почему он не заменяет константы на имена портов? и где находится сегмент данных(.dseg)? имхо, если известны данные легче разбиратся с программой)))
Все он заменяет, просто с прогой надо было разобраться.
в папке C:\Program Files\ja tools\ReAVR\ior лежат файлы с описанием регистров самых распространенных контроллеров (по их образцу не сложно сделать свой файл под другой контроллер). Просто после того как вы послали НЕХ-файл в программу нужно залесть в меню Disas Settings->IO registers->Load list from file и указать пусть в папку ...ReAVR\ior где лежат эти описния регистров...
coolibin
Jan 17 2008, 13:55
Цитата(m16 @ Jan 10 2008, 11:59)

http://ida470.narod.ru/ правда старенькая , но для авра выше крыши
я ,конечно, извиняюсь, но в списке нет atmega8! почему? есть только atmega8_L
Цитата(coolibin @ Jan 17 2008, 16:55)

я ,конечно, извиняюсь, но в списке нет atmega8! почему? есть только atmega8_L
Да это одно и тоже! с точки зрения программы ничем не отличается!
(отличается потреблением, макс частотой кварца...)
andrvisht
Jan 17 2008, 14:06
Цитата(coolibin @ Jan 17 2008, 17:55)

я ,конечно, извиняюсь, но в списке нет atmega8! почему? есть только atmega8_L
по командам и внутренностям разницы нет. Бери что есть, только вот в файл avr.cfg погляди, там могли чего нить не дописать.
LoneWolf
Jan 19 2008, 16:56
К вопросу о IDA. Это, пожалуй, лучший на сегоднешний день инструмент обратного проектирования. Сам сидел еще на старой IDA 4.17 честно купленной австрийскими боссами в далеком 2001-м. Ломал BIOSы всяческих hand-held терминалов и переписывал их под свою специфику. Идой можно делать все, но надо привыкнуть к интерфейсу. Сейчас на thepiratebay.org есть ссылка на торрент с самой последней версией IDA 5.2.0.908. "Лекарство" в комплекте. Скачал, попробовал на AVR'овских прошивках - работает волшебно! Разумеется, процесс итерационный, надо уметь и ручками работать. Особенно поразило автоматическое построение блок-схемы алгоритма программы. Дерзайте! ;-)
coolibin
Jan 21 2008, 10:03
У меня проблема со строками в IDA! Она их как то неправильно распознаёт! Ставлю 0-терминейтид стринг, а она всё равно какие то буквы правильно пишет какие то нет. Приходится самому по смыслу разбирать что написано. У кого нить было такое?
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.