首页 > 解决方案 > 理论上可以通用二进制格式吗?

问题描述

首先,这完全是一个理论问题,我认为这是完全不可能的。另外,我的意思是跨操作系统的“通用”,而不是跨处理器。为简单起见,我们假设 x86-64。我知道不同的操作系统使用不同的系统调用这一事实(例如,Linux 使用 int 0x80 和 Windows int 0x21 作为一个巨大的简化)。

例如,Windows 使用可移植可执行 (PE) 二进制格式,而 Linux(据我所知,还有 OSX,我对该操作系统并不熟悉)使用可执行和可链接格式 (ELF)。

现在; 为了便于讨论,让我们考虑一个由二进制、文本和数据组成的应用程序“x”。从理论上讲,是否有可能拥有一个独立于平台的二进制格式包装器,将这三个段标记为独立于操作系统?

*------------------*
| Universal Header |
|------------------|
| Libraries for    |
| each OS the app  |
| should run on    |
|------------------|
| Binary Code      |
*------------------*

我之所以问这个问题是因为我想知道理论上是否可以编写一个“容器”来自动检测操作系统,加载二进制应用程序并提供一个“适配器”库,它将对抽象库的调用转换为实际,依赖于操作系统的系统调用。我想象的类似于 JVM,但是没有 JITing/interpreting 进行,而是包装程序所做的只是加载和设置实际的二进制文件,顾名思义,它是二进制文件,以及标准化库,可自动将对其的调用转换为特定于操作系统的系统调用。如果可以使用通用二进制格式,您甚至可以发布多平台可执行文件。我不打算实际编码这个,我只是好奇这在理论上是否可行。

标签: binaryelfportable-executable

解决方案


推荐阅读