Embedded 我们能把一个十六进制文件转换回.c文件吗?

Embedded 我们能把一个十六进制文件转换回.c文件吗?,embedded,hex,embedded-linux,hexdump,hex-editors,Embedded,Hex,Embedded Linux,Hexdump,Hex Editors,第一个.c文件是用KeilIDE编写的嵌入式编码,从中生成十六进制文件。 现在我想把十六进制文件转换回.c文件。 可能吗? 如果是,怎么做?遗憾的是,不,这是不可能的 您可以使用objdump-D将代码分解成一个对象列表,但是您需要一些关于目标系统的知识,甚至需要确定哪些部分是代码和数据。如果您有这个功能,并且可以读取汇编代码,那么您可以了解代码的某些特定部分的功能,但这是一个非常耗时的过程 要完全转换回像C这样的高级语言,您需要一个反编译器。如果没有您正在使用的特定目标的详细信息,那么最好的建

第一个.c文件是用KeilIDE编写的嵌入式编码,从中生成十六进制文件。 现在我想把十六进制文件转换回.c文件。 可能吗?
如果是,怎么做?

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

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

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


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

就像不能将蛋糕转换为配料一样,也不能将机器代码转换为创建蛋糕的源代码

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


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

如果您有库,反汇编程序可以使用*.h或i.o.w.API描述来提供或多或少有意义的结果。别忘了ABI约定。所以,尝试反编译器毕竟不是个坏主意。