是否可以在 UNIX 上运行 COFF 可执行文件或在 Windows 上运行 ELF 可执行文件?在 Windows 和 UNIX 上运行这两种文件类型的步骤是什么。我只是好奇。
4 回答
要正确回答您的问题,有必要回顾一下 ELF、COFF 和 PE 是什么。这些二进制格式本质上只是容器,为操作系统提供有关如何执行文件中包含的原始 CPU 指令的指示。它们非常类似于 MKV、WMV 和 OGG 等音频/视频容器。对可执行格式的支持要么在操作系统中,要么不在。直到最近,Microsoft Windows 一直没有对 COFF 或 ELF 提供任何支持。在 Windows 10 中,Microsoft 通过内置到 Windows 内核 UserMode-Linux 兼容的系统例程中为 ELF 提供了间接支持。UserMode Linux 内核运行在 Windows 内核之上,并且几乎可以运行所有 ELF 二进制格式,就好像它独立于 MS Windows 运行一样。
使用 UserMode-Linux(子内核)的替代方案是让 Microsoft 以完全兼容的格式重写大部分 Linux API,他们的选择解决了另一个兼容性问题: API。“A”代表应用程序,“I”代表接口,但是作为接口的 API 主要只是一组可执行例程和环境假设。对文件系统和大多数基本系统例程的访问由 Windows 内核提供,而其他一切都在 UserMode Linux 内核中提供。这样,Windows 不仅可以运行 ELF 格式的可执行文件,而且可以运行已经在 Linux API 上运行的最流行的 ELF 可执行文件。
反过来,问题的另一半,在 Linux 上运行 PE(大多数 Microsoft Windows 可执行文件)也是可能的。有两个运行时包装库可以运行 MSIL(虚拟机应用程序)和 Win32(普通 CPU 应用程序)。因为 Linux 内核可扩展以识别某种字节格式,然后运行适当的包装程序,实际上内核支持 PE 和可能更多可执行的容器格式。因此,Linux 可以在单声道运行时(.NET/C# 应用程序)或 WINE 运行时(Win32 C/C++)中运行一些 PE 程序。
要安装 UserMode-Linux 环境,您可以按照Microsoft 开发网络上提供的说明进行操作。总结一下:
- 打开开发者模式:设置| 更新与安全 | 对于开发人员 | 检查开发人员模式单选按钮
- 在开始菜单中,打开“打开或关闭 Windows 功能”</li>
- 向下滚动并检查“Windows Subsystem for Linux (Beta)”功能
- 点击确定并重新启动(必需步骤)
- 重新启动后,打开 PowerShell/命令提示符并运行“Bash”并按照简单提示接受 Canonical 的许可证并开始下载 Ubuntu 映像
- 下载完成后,您将能够从“开始”菜单启动“Windows 上的 Ubuntu 上的 Bash”
请注意,此方法仅适用于 Windows 10,并且仍仅限于文本模式控制台和 Xorg 的 Win32 端口,如 vcXsrv 用于任何图形。Cygwin 或 MSYS2 系统无法运行 ELF 二进制文件,但可以在 Linux 系统上移植和运行通常是 ELF 二进制文件的相同应用程序。
要真正运行可执行文件并让它们做有用的事情,您需要担心 API,而不仅仅是可执行文件格式。在安装了 WINE 的 Linux 机器上,您可以从命令行运行 Windows .EXE 文件,它们执行的操作与在 Windows 上执行的操作相同。
反过来是不可能的,但是如果您在 Windows 机器上安装 CYGWIN,然后使用 CYGWIN 编译器从源代码重建应用程序,您将获得一个在 Windows 上运行的可执行文件,并执行与 Linux 可执行文件相同的操作Linux。许多标准的 Linux 工具已经被移植并在 CYGWIN 存储库中,包括 X-Windows 和 GIMP 之类的东西。
http://lbw.sourceforge.net/比线更好。低是做同样事情的另一个项目,但工作量较小。
编辑:http ://atratus.org/似乎也这样做,而不需要有 Interix/SFU。
COFF 最初是由 UNIX 引入的(大约在 System V 左右)所以是的,一些 UNIX 可能仍然支持 COFF 格式。Linux 至少在一段时间内已弃用它,而且大概大多数其他 Unices 也已弃用或完全放弃支持。
Windows ELF 支持有点不确定——如果没有一些深奥的技巧,几乎可以肯定不存在。您应该更具体地说明您要在这里做什么...