PIC 的十六进制反编译工具

6
我遇到了一个PIC微控制器问题。
我有一个很长时间以前由我编程的微控制器,但我丢失了相关的源代码和原理图。现在我需要反转端口的值。我可以使用一些NOT门来做到这一点,但这是一个很大的麻烦。或者,我需要重新编写整个程序。
我不希望看到PIC C或MikroC中的代码。有一个可理解的汇编代码就足够了。
所以,是否有人有使用过好的HEX反编译器可以用于此目的的经验?基于您的经验有什么评论吗? :)
编辑:设备PIC 16F84A
4个回答

7

反汇编不太可能成为一个实际的解决方案,而且你特定编译器和指令集组合的工具甚至都很少存在。

然而,反汇编是简单直接的,但你是否能理解结果代码则是另一回事,因为HEX文件中没有保留任何注释或符号;如果你有原始目标代码,则可以使反汇编更易读。 有许多PIC反汇编程序可用,只需谷歌一下即可;我无法指导你使用任何特定的反汇编程序,因为有许多带有不同指令集的PIC系列,并且你没有指定。

一种简单的反汇编方法是将HEX文件加载到MPLAB中,选择View->Disassembly Listing,然后右键单击窗口并选择“Output to File”。 这个输出可能需要一些处理才能适合作为汇编程序的输入。


5

我知道这是一篇旧帖子,但最近我遇到了类似的问题,却没有在网上找到一个非常完整的答案。由于硬盘故障,我失去了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 选项,可以生成相当不错的清单,非常接近能够直接汇编。显然,无法恢复变量名称和标签,但至少可以识别子程序,这使得事情变得更加容易。希望这对未来的某个人有所帮助。


这太棒了。除了一些小的错误更改,生成的ASM似乎很好...但是我不确定我们如何将单个ASM重新编译回二进制/十六进制图像,也许在Stack Overflow上有答案? - Crog
我发现这个工具生成的MPASM汇编语言已经过时了,所以要么使用旧的MPASM汇编器,要么升级为XC8的ASM。详情请参考:https://www.circuitbread.com/tutorials/mpasm-to-mplab-xc8-pic-assembler - Crog

2

这两个链接都已失效。实际上,该网站似乎是“空的”,并且是泰语。 - brewmanz
@brewmanz:好的,我已经修复了错误链接——新的 URL 看起来对我来说能够正常工作。 - David Cary

1

你应该能够将hex文件加载到MPLAB IDE中,并从那里查看汇编代码,同时在模拟器中运行它并逐步执行代码,如果我没有弄错的话。

如果未受代码保护,您还可以使用它来读取设备上的代码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接