Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: как считать программу с AVR?
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
coolibin
можно ли превратить код записаный в АТмега8 обратно в ASM? и, если да, то как это сделать?
KRS
Цитата(coolibin @ Dec 24 2007, 11:16) *
можно ли превратить код записаный в АТмега8 обратно в ASM? и, если да, то как это сделать?

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

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

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

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

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

Например, значение PORTD для atmega16 известно, он(ReAVR) мог бы и подставить!

Цитата(KRS @ Jan 10 2008, 09:22) *
Так для этого и нужна IDA, там можно все это сделать, и навигация по коду будет очень удобная, перекресные ссылки...


А .dseg? .dseq IDA покажет?
coolibin
а где скачать IDA? а то я скачал, а она для мобилок(
m16
http://ida470.narod.ru/ правда старенькая , но для авра выше крыши
Maik-vs
Цитата(coolibin @ Jan 10 2008, 10:50) *
Например, значение PORTD для atmega16 известно, он(ReAVR) мог бы и подставить!
А .dseg? .dseq IDA покажет?


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

Вам надо разобраться с IDA, даже там где она не распознает строки, Вы можете указать тип данных...
coolibin
После дизассемблирования в 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
Цитата(coolibin @ Jan 11 2008, 15:13) *
После дизассемблирования в ReAVR в коде присутсвует много непонятных блоков, например:
...интересно, что это такое?

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

Спасибо! wink.gif
ishvedov
Цитата(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
Цитата(m16 @ Jan 10 2008, 11:59) *
http://ida470.narod.ru/ правда старенькая , но для авра выше крыши

я ,конечно, извиняюсь, но в списке нет atmega8! почему? есть только atmega8_L
KRS
Цитата(coolibin @ Jan 17 2008, 16:55) *
я ,конечно, извиняюсь, но в списке нет atmega8! почему? есть только atmega8_L

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

по командам и внутренностям разницы нет. Бери что есть, только вот в файл avr.cfg погляди, там могли чего нить не дописать.
LoneWolf
К вопросу о IDA. Это, пожалуй, лучший на сегоднешний день инструмент обратного проектирования. Сам сидел еще на старой IDA 4.17 честно купленной австрийскими боссами в далеком 2001-м. Ломал BIOSы всяческих hand-held терминалов и переписывал их под свою специфику. Идой можно делать все, но надо привыкнуть к интерфейсу. Сейчас на thepiratebay.org есть ссылка на торрент с самой последней версией IDA 5.2.0.908. "Лекарство" в комплекте. Скачал, попробовал на AVR'овских прошивках - работает волшебно! Разумеется, процесс итерационный, надо уметь и ручками работать. Особенно поразило автоматическое построение блок-схемы алгоритма программы. Дерзайте! ;-)
coolibin
У меня проблема со строками в IDA! Она их как то неправильно распознаёт! Ставлю 0-терминейтид стринг, а она всё равно какие то буквы правильно пишет какие то нет. Приходится самому по смыслу разбирать что написано. У кого нить было такое?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.