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