Подскажите, можно ли в AVRStudio открыть hex-файл (созданный например в CodeVisionAVR для микроконтроллера ATmega8) и протрассировать его. А также попытаться дизассемблировать.
Я так понимаю - если реальный микроконтроллер hex-файл выполняет, то и симулятор должен выполнить.
Подскажите, можно ли в 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). В этот пустой исходник скопировать содержимое нашего файла. Скомпилить. И можно исследовать симулятором как белый человек. Ну, почти. Ассемблер ведь... Прилагаю код утилиты. Спойлер
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 *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 и т.д. там уже определены. Поэтому эти строчки нужно спрятать.
Понимаю, что я опоздал на 13 лет, но может кому-то ещё пригодится. Значит так. Открыть HEX файл как было описано выше, получилось только в версии 4.19. Пятая и выше уже не подходит. Да. Дизассемблировало. Работает симулятор. Но, скажу я вам, по сравнению с тем, как диззассемблирует IDA Pro, это лютый мрак. А исследовать код в таком виде, когда нет комментариев, подсветки синтаксиса, вместо мнемоник хекскоды, это чистое шайтанство. Поэтому предлагаю немного другой путь. Нужно сначала дизассемблировать прошивку в ИДЕ, потом скопипастить её в текстовый файл. Теперь файл нужно обработать утилиткой, чтобы закомментировать позиции вида seg0000:0000 в начале строки. Затем создать новый проект с ассемблером в Atmel Studio (тут уже можно и последнюю версию. У меня 7). В этот пустой исходник скопировать содержимое нашего файла. Скомпилить. И можно исследовать симулятором как белый человек. Ну, почти. Ассемблер ведь... Прилагаю код утилиты. Спойлер
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 *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 и т.д. там уже определены. Поэтому эти строчки нужно спрятать.
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения