Шестнадцатеричные декомпиляторы для ПИК

Я столкнулся с проблемой с контроллером PIC Micro.

У меня давно запрограммирован микроконтроллер, и я потерял соответствующий исходный код и принципиальные схемы. Теперь мне нужно инвертировать значение порта. Я могу сделать это, используя некоторые НЕ ворота, но это большая проблема. или в качестве альтернативы мне нужно будет написать всю программу обратно.

Я не ожидаю увидеть код обратно в PIC C или MikroC. Иметь понятный код сборки было бы достаточно.

Так есть ли у кого-нибудь опыт работы с хорошим HEX-декомпилятором, который я могу использовать для этой цели? Любые комментарии, основанные на вашем опыте?:)

РЕДАКТИРОВАТЬ: Устройство PIC 16F84A

4 ответа

Решение

Декомпиляция вряд ли будет практическим решением, и даже менее вероятно, что инструмент для вашей конкретной комбинации компилятора и набора команд даже существует.

Разборка, однако, проста, хотя сможете ли вы разобраться в полученном коде, это другой вопрос, так как в файле HEX не сохраняются никакие комментарии или символы; если у вас есть оригинальный объектный код, это может сделать разборку более читабельной. Есть много доступных дизассемблеров PIC, просто Google это; Я не могу направить вас к какому-либо конкретному, потому что есть несколько семейств PIC с разными наборами инструкций, а вы не указали.

Простым подходом к разборке было бы просто загрузить ваш HEX-файл в MPLAB и выбрать View->Disassembly Listing, затем щелкнуть правой кнопкой мыши по окнам и выбрать "Вывести в файл". Этот вывод может нуждаться в некотором массаже, чтобы он подходил для ввода ассемблеру.

Я знаю, что это старый пост, но недавно я столкнулся с подобной проблемой и не нашел очень полного ответа в Интернете. Я потерял свой проект MPLAB X IDE из-за отказа жесткого диска, к счастью, я уже запрограммировал устройство с рабочей версией кода.

Восстановление .hex
Выполните следующие действия, чтобы восстановить .hex информацию с запрограммированного устройства:

Используйте MPLAB X IDE и ваш программатор PIC (я использовал PICkit3), чтобы прочитать файл .hex с запрограммированного устройства:

  • Начните новый проект для вашего устройства.
  • В "Свойствах проекта" выберите свой программатор.
  • Щелкните правой кнопкой мыши папку проекта и выберите «Установить как основной проект».
  • Нажмите на стрелку рядом с «Чтение основного проекта памяти устройства» и выберите «Чтение памяти устройства в файл». Чтение памяти устройства в файл .hex

Дизассемблирование .hex
Вы можете просмотреть дизассемблированный файл в MPLAB X IDE, но вы не можете отредактировать или сохранить его (или, по крайней мере, я не мог понять, как это сделать), и он очень загадочен. Я нашел самый простой, без каких-либо условий, дизассемблер, который упакован с gputils, он называется gpdasm. Чтобы загрузить и установить, посетите страницу gputils здесь:

https://gputils.sourceforge.io/

Теперь откройте командную строку и перейдите в папку, в которой находится ваш файл .hex. Создайте исходный файл сборки из .hex с помощью следующей команды:

      gpdasm -p p16f84a -csno hexfile.hex > asmfile.dis

С опциями -c -s -n и -o получается довольно хороший листинг, который очень близок к тому, чтобы его можно было собрать как есть. Очевидно, что имена переменных и метки не могут быть восстановлены, но, по крайней мере, идентифицируются подпрограммы, что значительно упрощает задачу. Надеюсь, это поможет кому-то в будущем.

Список официальных дизассемблеров PIC приведен в официальном техническом справочнике PICList.

Многие люди никогда не используют автономный дизассемблер, но предпочитают использовать дизассемблер внутри своего любимого симулятора PIC.

http://piclist.com/techref/microchip/dissassemblers.htm

http://piclist.com/techref/microchip/simulators.htm

Вы должны быть в состоянии загрузить шестнадцатеричный файл в IDE MPLAB и просмотреть оттуда код сборки, а также запустить его и пройтись по коду в имитаторе, если я не ошибаюсь.

Вы также можете использовать его для чтения кода с устройства, если оно не защищено кодом.

Другие вопросы по тегам