Linux上的COFF或Windows上的ELF

时间:2009-12-12 07:31:42

标签: windows unix elf coff

是否可以在UNIX上运行COFF可执行文件或在Windows上运行ELF可执行文件?在Windows和UNIX上运行任一文件类型的步骤是什么?我只是好奇。

4 个答案:

答案 0 :(得分:8)

要实际运行可执行文件并让它们执行有用的操作,您需要担心API,而不仅仅是可执行文件格式。在安装了WINE的Linux计算机上,您可以从命令行运行Windows .EXE文件,它们与在Windows上执行的操作相同。

另一种方法是不可能的,但是如果你在Windows机器上安装CYGWIN,然后用CYGWIN编译器从源代码重建应用程序,你将获得一个在Windows上运行的可执行文件,并且与Linux相同可执行文件在Linux上。许多标准的Linux工具已经移植到CYGWIN存储库中,包括X-Windows和GIMP等。

答案 1 :(得分:4)

http://lbw.sourceforge.net/比线更好。 low是另一个做同样事情的项目,但那是不太有效。

编辑:http://atratus.org/似乎也是如此,无需使用Interix / SFU。

答案 2 :(得分:3)

要正确回答您的问题,请查看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"代表申请和"我"对于Interface,然而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's Development Network上提供的说明进行操作。总结一下:

  1. 启用开发者模式:设置|更新&安全|对于开发人员|检查开发者模式单选按钮
  2. 从开始菜单中,打开“打开或关闭Windows功能”
  3. 向下滚动并查看“Windows子系统Linux(测试版)”功能
  4. 点击确定并重新启动(必需步骤)
  5. 重新启动后,打开PowerShell /命令提示符并运行“Bash”并按照简单的提示接受Canonical的许可并启动Ubuntu映像的下载
  6. 下载完成后,您将可以从“开始”菜单启动“在Windows上对Ubuntu进行Bash”
  7. 请注意,此方法仅适用于Windows 10,并且仅限于文本模式控制台和Xorg的Win32端口,如vcXsrv,用于任何图形化。 Cygwin或MSYS2系统无法运行ELF二进制文件,但可以在Linux系统上移植和运行通常为ELF二进制文件的相同应用程序。

答案 3 :(得分:1)

COFF最初是由UNIX(围绕System V或其附近)引入的,所以是的,有些UNIX可能仍然支持COFF格式。至少在一段时间内,它已被Linux弃用,大概其他大多数其他Unices也已弃用或彻底放弃支持。

Windows ELF支持有点不确定 - 如果没有一些深刻的诡计,几乎肯定不会有。你应该更具体地说明你在这里要做的事情......