Страница 1 из 1
Дизассемблирование hex-файла в AVR Studio
Добавлено: Сб дек 08, 2012 01:37:03
feodorsumkin
Здравствуйте уважаемые форумчане!
Подскажите, можно ли в AVRStudio открыть hex-файл (созданный например в CodeVisionAVR для микроконтроллера ATmega8) и протрассировать его. А также попытаться дизассемблировать.
Я так понимаю - если реальный микроконтроллер hex-файл выполняет, то и симулятор должен выполнить.
Re: Дизассемблирование hex-файла в AVR Studio
Добавлено: Сб дек 08, 2012 03:31:44
m.ix
сырцы исходники должны быть
а кекс, уже готовый
попробуй пирожное наоборот преобразовать на компоненты.
Re: Дизассемблирование hex-файла в AVR Studio
Добавлено: Сб дек 08, 2012 09:16:15
uk8amk
feodorsumkin писал(а):Подскажите, можно ли в AVRStudio открыть hex-файл
Можно. В качестве платформы в настройках проекта выберете AVR simulator.
Re: Дизассемблирование hex-файла в AVR Studio
Добавлено: Сб дек 08, 2012 13:43:38
zero648
feodorsumkin писал(а):Подскажите, можно ли в AVRStudio открыть hex-файл (созданный например в CodeVisionAVR для микроконтроллера ATmega8) и протрассировать его. А также попытаться дизассемблировать.
Не важно в чем он создан, дизассемблировать можно любой НЕХ, но только в ассемблер.
Re: Дизассемблирование hex-файла в AVR Studio
Добавлено: Вс дек 09, 2012 03:51:17
feodorsumkin
Ну да, естественно hex в ассемблер, а мне большего и не надо...
Ребята, а можно поподробней, как импортировать hex-файл в AvrStudio?
Типа создаю новый проект, указываю Atmel AVR Assembler, указываю AVR Simulator, указываю тип кристалла ATmega8, открываю файл .hex ... и у меня какая-то runtime ошибка вылезает.
У меня avrstudio 4.13. Что делать?
Re: Дизассемблирование hex-файла в AVR Studio
Добавлено: Вс дек 09, 2012 08:46:42
uk8amk
Попросить у Атмеля что-то посвежее. У меня стоит студия 4.19, работает без вопросов.
File->Open File-> ваш_файл hex -> имя_проекта aps -> выбор платформы: симулятор, мега8 ->Finish.
Да, еще русские имена в пути лучше избегать.
Re: Дизассемблирование hex-файла в AVR Studio
Добавлено: Вс дек 09, 2012 13:50:31
borys
Еще можно воспользоваться для этого программой AVR Simulator.
Re: Дизассемблирование hex-файла в AVR Studio
Добавлено: Вс дек 09, 2012 21:44:05
feodorsumkin
Да, действительно, поставил новую Avr Studio, переложил hex-файл в папку без русских символов и все нормально открылось и автоматически дизассемблировалось. Спасибо, уважаемые радиокоты, очень помогли!!!
Re: Дизассемблирование hex-файла в AVR Studio
Добавлено: Вт июл 29, 2025 20:21:32
grayrat
Понимаю, что я опоздал на 13 лет, но может кому-то ещё пригодится.
Значит так. Открыть HEX файл как было описано выше, получилось только в версии 4.19. Пятая и выше уже не подходит. Да. Дизассемблировало. Работает симулятор. Но, скажу я вам, по сравнению с тем, как диззассемблирует IDA Pro, это лютый мрак. А исследовать код в таком виде, когда нет комментариев, подсветки синтаксиса, вместо мнемоник хекскоды, это чистое шайтанство. Поэтому предлагаю немного другой путь. Нужно сначала дизассемблировать прошивку в ИДЕ, потом скопипастить её в текстовый файл. Теперь файл нужно обработать утилиткой, чтобы закомментировать позиции вида seg0000:0000 в начале строки. Затем создать новый проект с ассемблером в Atmel Studio (тут уже можно и последнюю версию. У меня 7). В этот пустой исходник скопировать содержимое нашего файла. Скомпилить. И можно исследовать симулятором как белый человек. Ну, почти. Ассемблер ведь...
Прилагаю код утилиты.
Спойлер
Код: Выделить всё
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main( int argc, char *argv[] )
{
if( argc!=2 )
return printf( "usage: mkcom file.ext\n"
" file[.ext] - is a copy-paste from IDA Pro disassemble\n" );
FILE *f = fopen( argv[1], "rt" );
if( !f )
return printf( "Can't open file %s\n", argv[1] );
const int N=127;
char buf[ N+1 ];
strcpy( buf, argv[1] );
strcat( buf, ".asm" );
FILE *o = fopen( buf, "wt" );
if( !o )
{
fclose( f );
return printf( "Can't open file %s for writing\n", buf );
}
int n=0;
strcpy( buf, "/*" );
while( fgets( buf+4, N, f ) )
{
strncpy( buf+2, buf+4, 11 );
memcpy( (void*)(buf+13), (const void *)"*/", 2 );
fputs( buf, o );
n++;
}
fclose( f );
fclose( o );
printf( "copied. %d lines in files\n", n );
}
Да, ещё с чем столкнулся.
IDA в начале определяла мнемоники вида .equ XL, 26 и т.д. (МК Atmega8). Компилятору это жутко не понравилось, потому что XL и т.д. там уже определены. Поэтому эти строчки нужно спрятать.
Re: Дизассемблирование hex-файла в AVR Studio
Добавлено: Сб авг 30, 2025 14:22:08
alexvas2004
[uquote="grayrat",url="/forum/viewtopic.php?p=4734889#p4734889"]Понимаю, что я опоздал на 13 лет, но может кому-то ещё пригодится.
Значит так. Открыть HEX файл как было описано выше, получилось только в версии 4.19. Пятая и выше уже не подходит. Да. Дизассемблировало. Работает симулятор. Но, скажу я вам, по сравнению с тем, как диззассемблирует IDA Pro, это лютый мрак. А исследовать код в таком виде, когда нет комментариев, подсветки синтаксиса, вместо мнемоник хекскоды, это чистое шайтанство. Поэтому предлагаю немного другой путь. Нужно сначала дизассемблировать прошивку в ИДЕ, потом скопипастить её в текстовый файл. Теперь файл нужно обработать утилиткой, чтобы закомментировать позиции вида seg0000:0000 в начале строки. Затем создать новый проект с ассемблером в Atmel Studio (тут уже можно и последнюю версию. У меня 7). В этот пустой исходник скопировать содержимое нашего файла. Скомпилить. И можно исследовать симулятором как белый человек. Ну, почти. Ассемблер ведь...
Прилагаю код утилиты.
Спойлер
Код: Выделить всё
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main( int argc, char *argv[] )
{
if( argc!=2 )
return printf( "usage: mkcom file.ext\n"
" file[.ext] - is a copy-paste from IDA Pro disassemble\n" );
FILE *f = fopen( argv[1], "rt" );
if( !f )
return printf( "Can't open file %s\n", argv[1] );
const int N=127;
char buf[ N+1 ];
strcpy( buf, argv[1] );
strcat( buf, ".asm" );
FILE *o = fopen( buf, "wt" );
if( !o )
{
fclose( f );
return printf( "Can't open file %s for writing\n", buf );
}
int n=0;
strcpy( buf, "/*" );
while( fgets( buf+4, N, f ) )
{
strncpy( buf+2, buf+4, 11 );
memcpy( (void*)(buf+13), (const void *)"*/", 2 );
fputs( buf, o );
n++;
}
fclose( f );
fclose( o );
printf( "copied. %d lines in files\n", n );
}
Да, ещё с чем столкнулся.
IDA в начале определяла мнемоники вида .equ XL, 26 и т.д. (МК Atmega8). Компилятору это жутко не понравилось, потому что XL и т.д. там уже определены. Поэтому эти строчки нужно спрятать.[/uquote]
Видео урок бы.
Re: Дизассемблирование hex-файла в AVR Studio
Добавлено: Сб авг 30, 2025 15:18:00
OKF
[uquote="grayrat",url="/forum/viewtopic.php?p=4734889#p4734889"]Понимаю, что я опоздал на 13 лет...[/uquote]
А что редактором этого не сделать? А ещё есть sed, если хочется автоматизации.
Re: Дизассемблирование hex-файла в AVR Studio
Добавлено: Вт ноя 11, 2025 22:14:49
grayrat
[uquote="OKF",url="/forum/viewtopic.php?p=4742542#p4742542"]А ещё есть sed, если хочется автоматизации.[/uquote]
Может и можно. Но я не из тех, кто сверлит текстолит когтями.