Подскажите, можно ли в AVRStudio открыть hex-файл (созданный например в CodeVisionAVR для микроконтроллера ATmega8) и протрассировать его. А также попытаться дизассемблировать.
Я так понимаю - если реальный микроконтроллер hex-файл выполняет, то и симулятор должен выполнить.
feodorsumkin писал(а):Подскажите, можно ли в AVRStudio открыть hex-файл (созданный например в CodeVisionAVR для микроконтроллера ATmega8) и протрассировать его. А также попытаться дизассемблировать.
Не важно в чем он создан, дизассемблировать можно любой НЕХ, но только в ассемблер.
Ну да, естественно hex в ассемблер, а мне большего и не надо...
Ребята, а можно поподробней, как импортировать hex-файл в AvrStudio?
Типа создаю новый проект, указываю Atmel AVR Assembler, указываю AVR Simulator, указываю тип кристалла ATmega8, открываю файл .hex ... и у меня какая-то runtime ошибка вылезает.
Да, действительно, поставил новую Avr Studio, переложил hex-файл в папку без русских символов и все нормально открылось и автоматически дизассемблировалось. Спасибо, уважаемые радиокоты, очень помогли!!!
Понимаю, что я опоздал на 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="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]
[uquote="grayrat",url="/forum/viewtopic.php?p=4734889#p4734889"]Понимаю, что я опоздал на 13 лет...[/uquote]
А что редактором этого не сделать? А ещё есть sed, если хочется автоматизации.
[uquote="OKF",url="/forum/viewtopic.php?p=4742542#p4742542"]А ещё есть sed, если хочется автоматизации.[/uquote]
Может и можно. Но я не из тех, кто сверлит текстолит когтями.