微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我们可以将十六进制文件转换回 .c 文件吗?

如何解决我们可以将十六进制文件转换回 .c 文件吗?

一个 .c 文件是用 KEIL IDE 编写的嵌入式编码,从中生成 hex 文件。 现在我想将十六进制文件转换回 .c 文件。 是否有可能? 如果是,如何?

解决方法

遗憾的是,这是不可能的。

您可以使用 objdump -D 将代码反汇编成一个对象列表,但您需要了解目标系统,甚至确定哪些部分是代码和数据。如果你有这个并且可以阅读汇编代码,那么你可以找出代码的某些特定部分做了什么,但这是一个非常耗时的过程。

要完全转换回像 C 这样的高级语言,您需要一个反编译器。如果没有您正在使用的特定目标的详细信息,那么最好的建议是您只需在谷歌上搜索“反编译器”。

问题是尽管反编译器的输出是有效的 C,但它可能看起来与原始输入完全不同。一个 hex 文件不包含任何关于函数或变量名称的信息,因此每个对象都会有一个自动生成的名称,但意义不大。

,

就像您无法将蛋糕转换为其成分一样,您也无法将机器代码转换为创建它的源代码。

出现在源代码中的大部分内容都是为了人类的利益或促进编译/链接过程,并在 hex 文件中被丢弃。

“反编译器”的尝试确实存在,但本质上是学术或实验性的,或者使用特定编译器生成的特定代码,并且会与编译器优化生成的代码产生冲突。此外,此类工具使用对象文件(Keil ARM 中的 .axf),这些文件可能保留一些反编译器可以工作的元数据,例如入口点或可能的符号或调试信息。十六进制文件只是一种二进制图像编码,并去除了所有元数据 - 它只是机器代码指令和程序数据。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。