如何将 .hex 文件反编译为 Arduino 的 C++?
Posted
技术标签:
【中文标题】如何将 .hex 文件反编译为 Arduino 的 C++?【英文标题】:How do I decompile a .hex file into C++ for Arduino? 【发布时间】:2013-05-18 08:26:09 【问题描述】:我有一个 hex 文件,该文件将被闪存到运行在 Arduino 设备上的 Atmel 芯片上。
在将其放入我的 Arduino 之前,我想修改此文件的某些方面,但我没有源 C++;只是十六进制文件。
是否有任何有效的方法来获取 .hex 文件并重新组装 C 代码?如果有,怎么做?
【问题讨论】:
不,不可能得到原始文件,或者任何看起来像原始文件的东西。 您可以将其反编译回您可以修改的 C 代码,但正如 Joachim 所说,它看起来不会像原来的那样。 @BenVoigt——没关系。我该怎么做呢?谢谢! @MatthewPatrickCashatt Google“C 反编译器”。我认为 AVR 不存在。 如果您找不到反编译器,您也可以寻找 IDA Pro 并检查它是否支持您的目标。当然,IDA 不是反编译器而是反汇编器,因此您可能必须自行反汇编并将其转回 C,或者通过汇编器应用您想要的更改。虽然 IDA 相当昂贵,但它是逆向工程的最佳工具。 【参考方案1】:在给出其他答案时,这可能不可用。它将 .hex 转换回汇编程序。您可能需要了解它所针对的原始 AVR 的体系结构。对于我编写和编译的代码来说效果很好。我用 AVR-25 测试了 Tiny 85。希望它有所帮助。有一个相同的东西的离线版本会很高兴! http://www.onlinedisassembler.com/ 另一个商业选择是来自https://www.hex-rays.com/的IDA
【讨论】:
【参考方案2】:我会查看avr-objdump (gulp) 的输出:
avr-objdump -j .sec1 -d -m avr5 foo.hex
您必须将“-m”后面的单词更改为您的架构。即使/如果可行,它也会为您提供汇编代码,这看起来可能不是您曾经编写过的任何东西。变量名称会有所不同,方便的 Arduino 函数看起来就像是杂乱无章的汇编垃圾。 希望有更好的办法,抱歉。
另请参阅AVR GCC forum - Using avr-objdump to disassemble hex code。
【讨论】:
以上是关于如何将 .hex 文件反编译为 Arduino 的 C++?的主要内容,如果未能解决你的问题,请参考以下文章