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



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

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

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

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

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

就像你不能把蛋糕转换成它的配料一样,你也不能把机器代码转换成创建它的源代码。

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

尝试";反编译器";确实存在,但本质上是学术性或实验性的,或者使用特定编译器为特定编译器生成的代码,并且将难以使用编译器优化生成的代码。此外,这些工具与对象文件(Keil ARM中的.axf(一起工作,对象文件可能保留反编译器可以工作的一些元数据,例如入口点或可能的符号或调试信息。一个十六进制文件只是一个二进制图像编码,所有的元数据都被剥离了——它只是机器代码指令和程序数据。

最新更新