我有一个很长时间以前由我编程的微控制器,但我丢失了相关的源代码和原理图。现在我需要反转端口的值。我可以使用一些NOT门来做到这一点,但这是一个很大的麻烦。或者,我需要重新编写整个程序。
我不希望看到PIC C或MikroC中的代码。有一个可理解的汇编代码就足够了。
所以,是否有人有使用过好的HEX反编译器可以用于此目的的经验?基于您的经验有什么评论吗? :)
编辑:设备PIC 16F84A
反汇编不太可能成为一个实际的解决方案,而且你特定编译器和指令集组合的工具甚至都很少存在。
然而,反汇编是简单直接的,但你是否能理解结果代码则是另一回事,因为HEX文件中没有保留任何注释或符号;如果你有原始目标代码,则可以使反汇编更易读。 有许多PIC反汇编程序可用,只需谷歌一下即可;我无法指导你使用任何特定的反汇编程序,因为有许多带有不同指令集的PIC系列,并且你没有指定。
一种简单的反汇编方法是将HEX文件加载到MPLAB中,选择View->Disassembly Listing,然后右键单击窗口并选择“Output to File”。 这个输出可能需要一些处理才能适合作为汇编程序的输入。
我知道这是一篇旧帖子,但最近我遇到了类似的问题,却没有在网上找到一个非常完整的答案。由于硬盘故障,我失去了MPLAB X IDE项目,但幸运的是我已经使用工作版本的代码对设备进行了编程。
恢复 .hex
按照以下步骤从编程的设备中恢复 .hex 信息:
使用 MPLAB X IDE 和你的 PIC 程序员(我使用的是 PICkit3)从编程的设备读取 .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 选项,可以生成相当不错的清单,非常接近能够直接汇编。显然,无法恢复变量名称和标签,但至少可以识别子程序,这使得事情变得更加容易。希望这对未来的某个人有所帮助。
你应该能够将hex文件加载到MPLAB IDE中,并从那里查看汇编代码,同时在模拟器中运行它并逐步执行代码,如果我没有弄错的话。
如果未受代码保护,您还可以使用它来读取设备上的代码。