与格式无关的二进制对象?

Format-independent binary object?

通常编译器输出的目标文件是特定格式的,例如Linux 等上的 ELF,macOS 上的 mach-O,以及 Windows.

上的 COFF/PE

现在,假设源代码是​​跨平台兼容的。是否有格式独立的 "object files" 形式?从某种意义上说,这个 "format-independent format" 的二进制文件可以 "converted" 或 "lowered" 到以后任何格式 (ELF/mach-O/..) 的真实目标文件。

LLVM IR 的二进制形式就是一个很好的例子,因为它可以降低为机器代码。但是,LLVM IR 是独立于 ISA 的,所以 "low-level" 不够用。假设提供了 ISA(例如 x86_64),我可以从独立于 ISA 到独立于格式甚至更低吗?

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

但是,借助可以在目标文件格式之间进行转换的 objconv utility,您可以实现您所描述的。 只需选择一种现有格式作为 "independent" 格式,然后使用 objconv 转换为 "specific" 格式 (ELF/Mach-O/COFF)。

它工作得很好,尽管一些特定于平台的数据(如调试信息)在转换过程中没有保留。