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

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

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

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

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

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


person Chathuranga Chandrasekara    schedule 03.06.2010    source источник


Ответы (4)


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

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

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

person Clifford    schedule 03.06.2010

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

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

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

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

person Community    schedule 23.06.2010
comment
Обе эти ссылки мертвы. На самом деле сайт кажется «пустым» и на тайском языке. - person brewmanz; 09.01.2018
comment
@brewmanz: Хорошо, я исправил неработающие ссылки — новые URL-адреса того же контента, похоже, теперь работают на меня. - person David Cary; 23.02.2018

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

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

person Cobusve    schedule 03.06.2010

Я знаю, что это старый пост, но недавно я столкнулся с подобной проблемой и не нашел очень полного ответа в Интернете. Я потерял свой проект 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 получается довольно хороший листинг, который очень близок к тому, чтобы его можно было собрать как есть. Очевидно, что имена переменных и метки не могут быть восстановлены, но, по крайней мере, идентифицируются подпрограммы, что значительно упрощает задачу. Надеюсь, это поможет кому-то в будущем.

person bjoubert89    schedule 12.12.2020