格式无关的二进制对象?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了格式无关的二进制对象?相关的知识,希望对你有一定的参考价值。

通常,编译器输出的目标文件是特定格式,例如Linux等上的ELF,macOS上的mach-O和Windows上的COFF / PE。

现在,假设源代码跨平台兼容。是否存在一种与格式无关的“目标文件”?在某种意义上,这种“格式无关格式”的二进制文件可以在以后以任何格式(ELF / mach-O / ..)“转换”或“降低”到实际目标文件。

LLVM IR的二进制形式就是一个很好的例子,因为它可以降低到机器代码。但是,LLVM IR与ISA无关,因此它不够“低级”。假设给出了ISA(例如x86_64),我可以从独立于ISA的更低版本到格式无关吗?

答案

我很确定没有这样的格式,至少没有主编译器支持的格式。 (即使有这样的格式,如果没有编译器支持,它实际上也是无用的。)

但是,在objconv utility的帮助下,它可以在目标文件格式之间进行转换,您可以实现您所描述的内容。只需选择一种现有格式作为“独立”格式,然后使用objconv转换为“特定”格式(ELF / Mach-O / COFF)。

虽然在转换过程中不会保留某些特定于平台的数据(如调试信息),但它的工作原理相当不错。

以上是关于格式无关的二进制对象?的主要内容,如果未能解决你的问题,请参考以下文章

从无关类调用片段中的方法

Java基础

虚拟机类加载机制

虚拟机执行子系统

vscode用啥符号把某一段代码包起来,类似C#的#region?

序列化Serializable接口