Linux上的COFF或Windows上的ELF

Linux上的COFF或Windows上的ELF,windows,unix,elf,coff,Windows,Unix,Elf,Coff,是否可以在UNIX上运行COFF可执行文件,或在Windows上运行ELF可执行文件?要在Windows和UNIX上运行任何一种文件类型,需要哪些步骤。我只是好奇 COFF最初是由UNIX引入的(大约在systemv左右),所以是的,一些UNIX可能仍然支持COFF格式。Linux至少有一段时间不支持它,据推测,大多数其他Unice也不支持或完全放弃了支持 Windows ELF支持有点不确定——几乎可以肯定,如果没有一些深层次的欺骗,就不会有。您应该更具体地说明您在这里要做什么…要实际运行可执

是否可以在UNIX上运行COFF可执行文件,或在Windows上运行ELF可执行文件?要在Windows和UNIX上运行任何一种文件类型,需要哪些步骤。我只是好奇

COFF最初是由UNIX引入的(大约在systemv左右),所以是的,一些UNIX可能仍然支持COFF格式。Linux至少有一段时间不支持它,据推测,大多数其他Unice也不支持或完全放弃了支持


Windows ELF支持有点不确定——几乎可以肯定,如果没有一些深层次的欺骗,就不会有。您应该更具体地说明您在这里要做什么…

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

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

比line更好用。 low是做同样事情的另一个项目,但那是不太有效的


编辑:似乎也这样做,不需要Interix/SFU。

要正确回答您的问题,请查看ELF、COFF和PE是什么。这些二进制格式本质上只是容器,用于向操作系统提供有关如何执行文件中包含的原始CPU指令的指示。它们非常像MKV、WMV和OGG等音频/视频容器。操作系统中是否支持可执行格式。直到最近,微软Windows一直不支持COFF或ELF。在Windows 10中,Microsoft通过构建与Windows内核UserMode Linux兼容的系统例程为ELF提供了间接支持。UserMode Linux内核运行在Windows内核之上,运行所有ELF二进制格式,就好像它独立于MS Windows运行一样

微软使用usermodelinux(子内核)的另一种选择是以完全兼容的格式重写大部分Linux API,他们的选择解决了另一个兼容性问题:API。“A”代表应用程序,“I”代表接口,但作为接口的API主要只是一组可执行例程和环境假设。对文件系统和最基本的系统例程的访问由Windows内核提供,而其他一切都由UserMode Linux内核提供。这样,Windows不仅可以运行ELF格式的可执行文件,而且还可以运行最流行的ELF可执行文件,这些文件已经在Linux API上运行

相反,问题的另一半,在Linux上运行PE(大多数Microsoft Windows可执行文件)也是可能的。有两个运行时包装库可以运行MSIL(虚拟机应用程序)和Win32(普通CPU应用程序)。因为Linux内核是可扩展的,可以识别特定的字节格式,然后运行适当的包装程序,实际上内核支持PE和可能更多的可执行容器格式。因此,Linux可以在mono运行时(.NET/C#applications)或WINE运行时(Win32 C/C++)中运行一些PE程序

要安装UserMode Linux环境,可以按照上提供的说明进行操作。总结如下:

  • 打开开发者模式:设置|更新和安全|开发者|检查开发者模式单选按钮
  • 从“开始”菜单中,打开“打开或关闭Windows功能”
  • 向下滚动并检查“Windows Linux子系统(测试版)”功能
  • 点击OK并重新启动(必选步骤)
  • 重新启动后,打开PowerShell/命令提示符并运行“Bash”,按照简单提示接受Canonical的许可证并开始下载Ubuntu映像
  • 下载完成后,您可以从“开始”菜单启动“Windows上的Ubuntu Bash”

  • 请注意,此方法仅适用于Windows 10,并且仍然限于文本模式控制台和类似Xorg的Win32端口vcXsrv,用于任何图形化操作。Cygwin或MSYS2系统无法运行ELF二进制文件,但可以移植和运行Linux系统上通常为ELF二进制文件的应用程序。

    确实在Windows上加载了ELF可执行文件,这可能是一个很好的起点。正如我在另一个回答中所评论的,试图与WINE相反,在Windows上运行未经修改的Linux二进制文件。该项目已被放弃多年,但它明确表明,这一概念是可能的。如果我没记错的话,它可以运行几个静态链接的控制台程序,IPC也在工作中。SFA/SUA只运行为NT编译的PE可执行文件。我应该回答问题的另一半。在Linux上运行PE(windows可执行文件)有多种方法,因为Linux内核可以扩展以识别特定的字节格式,然后运行适当的包装程序。因此,Linux可以在mono运行时(.NET/C#applications)或WINE运行时(Win32 C/C++)中运行一些PE程序。