Рассмотрим процесс преобразования исходного кода в машинный код, пригодный для записи в память микроконтроллера. Узнаем какие есть программные инструменты в операционной системе Linux для компиляции и прошивки программ в микроконтроллеры используя языки программирования Си и Ассемблер. Увидим какие есть среды разработки (IDE) для написания и обработки исходного кода под AVR в Linux.
Компиляция программы и HEX
Давайте разберемся как происходит компиляция, подготовка и запись программы в микроконтроллер AVR. Допустим что мы будем писать программу на языке Си для AVR микроконтроллера, вот что будет происходить в процессе работы:
- Написанный нами текст исходного кода (source code) программы на универсальном языке Си сохраняется в файл с расширением «.c»;
- Содержимое файла «.c» передается на обработку программе-компилятору (compiler), которая переводит понятный нам код на языке Си в объектные машинные коды и создает на выходе файл с расширением «.obj»;
- Такой бинарный файл не подходит для прямой записи в память микроконтроллера, поэтому его следует подготовить. Производим извлечение необходимых порций машинного кода и получаем на выходе текстовый файл с расширением «.hex» в формате Intel HEX;
- Производим запись файла с расширением «.hex» во внутреннюю энергонезависимую память микроконтроллера;
- Программа готова к выполнению в микроконтроллере!
Intel HEX — это специальный формат файлов, который служит для представления двоичных данных в текстовом виде. Данный формат позволяет указывать с точностью до байта в какие адреса нужно поместить те или иные данные в памяти микроконтроллера.
Основы #HEX для хакеров
Рис. 1. Структура файла в формате Intel HEX.
Более подробно о формате файлов Intel HEX можно узнать на Википедии: https://ru.wikipedia.org/wiki/Intel_HEX
Программное обеспечение для AVR в Linux
В пакетах программного обеспечения для Linux содержатся десятки тысяч программ и утилит.
Давайте же посмотрим что у нас есть в пакетах для нашего дистрибутива Linux по ключевому слову «avr», выполним поиск командой:
apt-cache search avr
В результате получим список из нескольких десятков программ и библиотек.
Для начала нам будет интересно вот что:
- avr-libc — Стандартная библиотека C предназначенная для совместного использования с GCC специально под Atmel AVR;
- avra — Ассемблер для AVR микроконтроллеров (AVRAssevmler);
- avrdude — Программное обеспечение для программирования (прошивки) Atmel AVR микроконтроллеров;
- avrdude-doc — Документация к программе avrdude для чтения в оффлайн режиме, формат HTML;
- binutils-avr — Набор утилит для работы с данными для AVR микроконтрллеров (avr-objcopy, avr-size и другие);
- gcc-avr — Компилятор языка GNU C, кросс-компилятор для AVR;
- gdb-avr — Отладчик (GNU Debugger) для AVR микроконтроллеров;
- simulavr — Консольный симулятор для Atmel AVR микроконтроллеров.
Установим весь этот набор ПО одной командой:
Reverse engineering | Исходный код из исполняемого файла | ghidra
sudo apt-get install avr-libc avra avrdude avrdude-doc binutils-avr gcc-avr gdb-avr simulavr
С этим набором программного обеспечения и каким-то редактором текста уже можно писать программы и прошивать микроконтроллеры AVR.
При помощи avra мы сможем скомпилировать исходный код на Ассемблере (sample_program.asm) и сразу же получить на выходе готовый HEX-файл (sample_program.hex) для записи в флешь-память микроконтроллера.
С помощью gcc-avr можно произвести компиляцию исходного кода на языке Си и получить на выходе объектный файл с машинными кодами (sample_program.obj), который потом при помощи программы avr-objcopy, что входит в комплект утилит binutils-avr, переконвертируем в HEX-формат (sample_program.hex) для записи в флешь-память AVR чипа.
При помощи программы avr-size из комплекса утилит binutils-avr мы сможем узнать размер секций, а также общий размер данных в получившемся HEX-файле чтобы убедиться что программа поместится в памяти микроконтроллера.
Мощная программа avrdude даст нам возможность считать и записать прошивку в микроконтроллер. Мы сможем записать в микроконтроллер прошивку в HEX-формате (sample_program.hex) которая была получена после компиляции программы на Ассемблере, Си или другом компиляторе для AVR.
В программном симуляторе simulavr мы сможем произвести симуляцию работы программы, посмотреть содержимое регистров микроконтроллера в процессе выполнения программы.
Какие редакторы исходного кода и среды разработки подойдут для программирования AVR микроконтроллеров в Linux? — в принципе любые редакторы с удобной вам подсветкой синтаксиса для языков программирования Си и Ассемблера.
Ниже рассмотрим некоторые из редакторов и сред программирования, которые можно оптимизировать под свои нужды для удобного программирования AVR микроконтроллеров в Linux и не только.
Среда разработки Geany
Легковесная и свободная программа Geany — это кроссплатформенная (Linux, FreeBSD, MacOS, Windows) среда разработки для различных языков программирования (поддерживается около 50 языков) с множеством настроек, плагинов, красивой подсветкой синтаксиса и другими удобными фишками. Из плюсов в отношении разработки для AVR у программной среды Geany можно отметить:
- Красивая подсветка кода, есть специально разработанный пресет для Ассемблера AVR
- Встроенный терминал, удобно отслеживать процесс компиляции, прошивки, установки фьюзов и т.п.
- Возможность настройки кнопочек Compile, Build, Run под команды для компиляции и прошивки программы в микроконтроллер
- Простой и приятный настраиваемый интерфейс
Установка Geany в Linux производится одной командой:
sudo apt-get install geany
Примерный вид программы с открытым исходным кодом на Ассемблере приведен ниже.
Рис. 2. Универсальная среда для разработчика программ — Geany в Linux.
CodeBlocks
Еше одна очень функциональная свободная кроссплатформенная среда разработки — это CodeBlocks. Данная среда поддерживает множество различных компиляторов и языков, есть встроенная поддержка GNU ARM GCC Compiler, GNU AVR GCC Compiler, есть поддержка плагинов и подсветку синтаксиса в коде. Очень мощная среда для программирования со встроенной поддержкой проектов для AVR и ARM.
Установить CodeBlocks можно командой:
sudo apt-get install codeblocks
Вот как выглядит данная среда разработки:
Рис. 3. Среда разработки Code:Blocks.
NetBeans
Очень удобная свободная интегрированная среда разработки приложений (IDE). Поддерживает множество языков программирования:Java, Python, PHP, JavaScript, C, C++ и другие. Поддержка ASM есть в плагине для C, C++. NetBeans — универсальная, качественная и очень мощная среда разработки с множеством возможностей и удобств для разработчиков.
Рис. 4. NetBeans — универсальная среда разработки.
NetBeans поддерживает более 200 различных плагинов под разные языки программирования и технологии, в этой среде можно все настроить под себя и сделать по своему вкусу. К тому же NetBeans может работать в портабельном режиме, что весьма удобно если все инструменты носить с собой на флешке.
При разработке программ для AVR эта среда представляет удобства в качестве редактора исходного кода, в котором есть дерево проекта, сортировка по функциям, проверка синтаксиса и многое другое.
Kate
KDE Advanced Text Editor или же кратко Kate — это мощный универсальный редактор что входит в состав среды рабочего стола KDE.
Рис. 5. Kate — универсальный редактор текстов и исходного кода.
Отличный редактор для разработки небольших программ, редактирования файлов с различным содержимым. Имеет множество встроенных функций и инструментов для работы с текстом и исходным кодом.
Nano
Если вы привыкли все делать в консоли то здесь для программирования также есть мощные и простые в использовании инструменты. Листать и работать с файлами и директориями можно при помощи MC (Midnight Commander), а редактировать файлы можно в симпатичном и несложном в использовании редакторе Nano.
Нано гибок в настройке, поддерживает подсветку синтаксиса и прост в управлении.
Для установки редактора Nano нужно выполнить команду:
sudo apt-get install nano
Вот как выглядит исходный код файла на ассемблере в редакторе nano:
Рис. 6. Консольный редактор Nano для программирования AVR микроконтроллеров.
Kontrollerlab
Нашел недавно интересную программу под названием kontrollerlab, которая представляет собою среду заточенную под разработку программного обеспечения для микроконтроллеров. Данная программа является эволюционным продолжением набора утилит xavrtools.
Для работы в программе используются avr-gcc, avrdude, последовательный терминал (serial terminal) для удобной отладки, kate — как основной редактор кода встроенный в среду разработки.
Рис. 7. Kontrollerlab — среда разработки ПО для микроконтроллеров.
Последняя дата обновления проекта (сейчас 09.2015) на сайте sourceforge.net — 2013-05-28. Развивается ли проект и будет ли развиваться дальше — не известно. Но тем не менее он заслуживает внимания и эту среду разработки стоит попробовать в деле.
Программу можно скомпилировать из исходных кодов или же скачать готовые пакеты для Linux — *.deb или *.rpm.
AVRStudio
Отличная и бесплатная среда от самой ATMEL — это AVRStudio. Версии что работает под Linux не было и нет, к сожалению. Но тем не менее, по отзывам и статьям в интернете можно судить что версия 4.19 вполне удачно запускается и работает под wine (транслятор, который позволяет запускать Windows-программы на Linux и UNIX).
Рис. 8. Программа AVRStudio 4.
К тому же можно использовать виртуальную машину VirtualBox, пробросив в нее USB-программатор через реальный USB порт.
AVRStudio — очень удобная среда разработки под AVR микроконтроллеры с отличным симулятором, так что под Линукс можно и ее завести, приложив некоторые усилия.
На настройке и использовании AVRStudio под Linux я останавливаться не буду, для этого возможно лучше будет написать отдельную статью. Сейчас важно понимать что такая программа есть и что она работает под Линукс.
Заключение
Как декомпилировать файл .hex в C ++ для Arduino?
У меня есть шестнадцатеричный файл, который нужно прошить на Atmel чип работает на устройстве Arduino.
В этом файле есть некоторые аспекты, которые я хотел бы изменить, прежде чем поместить его на свой Arduino, но у меня нет исходного кода C ++; просто шестнадцатеричный файл.
Есть ли эффективный способ взять файл .hex и собрать код C? Если так, то как?
Решение
Возможно, это не было доступно в то время, когда были даны другие ответы. Он покрывает .hex обратно ассемблеру. Вам может понадобиться знать архитектуру оригинального AVR, для которого она была предназначена. Хорошо работает для меня код, который я написал и скомпилировал. Я тестировал AVR-25 для Tiny 85.
Надеюсь, это поможет. Было бы неплохо иметь офлайн-версию той же вещи!
http://www.onlinedisassembler.com/
Альтернативным коммерческим вариантом является IDA от https://www.hex-rays.com/
Другие решения
Я бы посмотрел на вывод АРН-objdump (глоток):
avr-objdump -j .sec1 -d -m avr5 foo.hex
Вам придется изменить слова, следующие за «-m» в вашей архитектуре. Даже когда / если это сработает, вы получите код сборки, который может не выглядеть так, как вы когда-либо писали. Имена переменных будут разными, а удобные функции Arduino будут выглядеть как грязный сборочный мусор.
Я надеюсь, что есть лучший способ, извините.
Источник: web-answers.ru
Как из hex файла получить исходную си программу
Исходный код на «Си» предусматривает различные комментарии к действиям, в «hex» нет этих комментарий. Сможешь разобраться без комментария?
Добавлено: Ср фев 24, 2016 11:19:14
aleksei18rus писал(а):
Добрый вечер, есть программа которая из hex (bin) делает исходный код на Си?
. да еще для всех существующих типов МК. Конечно, нет. Так что для взлома чужой парш прошивки придется изучить АСМ. А кто сказал, что хакер — это просто ?
Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет
Добавлено: Ср фев 24, 2016 17:38:14
Думаю, даже поизучав Асм, все равно тяжко будет очень.
Многие зарубежные компании покинули российский рынок, и перед разработчиками и производителями электронных изделий возникла задача адекватной замены. Третье поколение DC/DC-преобразователей популярного китайского производителя MORNSUN для монтажа на печатную плату не только не уступает по характеристикам изделиям европейских производителей, но и превосходит их по таким параметрам, как напряжение изоляции, рабочий температурный диапазон и максимальная емкость нагрузки. Как подобрать замену?
Добавлено: Ср фев 24, 2016 18:16:55
компиляция это дифференцирование , нет ничего проще .
а наоборот — интеграл , это намного сложнее
_________________
Меня зовут Димон .
Приглашаем 22 июня на вебинар, посвященный подходу компании MEAN WELL к созданию мощных управляемых систем низковольтного и высоковольтного питания и зарядных установок для промышленного, технологического, телекоммуникационного, медицинского, радиопередающего и другого оборудования, а также для систем альтернативной энергетики. На вебинаре мы рассмотрим новинки и серийную продукцию в концепции «3+N», расскажем об этой концепции и о том, как создать из готовых модулей систему питания мощностью до 360 кВт с напряжением до 380…400 В (постоянного тока). Будут представлены ИП с рециркуляцией энергии для тестового оборудования и модули управления питанием.
Добавлено: Чт фев 25, 2016 09:38:45
СКАЗОЧНИК писал(а):
Думаю, даже поизучав Асм, все равно тяжко будет очень.
Иногда это единственный выход. Однажды после основательной переделки проги у меня гавкнулся винчестер. Остался работающий проверенный HEX и не первой свежести копия исходников. Потратив день, шаг за шагом восстановил работающий исходник. С тех пор стал чаще соранять промежуточные результаты.
Ну а чужую прогу расколоть, само собой, еще труднее. Особенно если автор «заметал следы», затрудняя декомпиляцию.
Последний раз редактировалось Jack_A Чт фев 25, 2016 09:47:15, всего редактировалось 1 раз.
Источник: www.radiokot.ru