Linux上的COFF或Windows上的ELF

问题描述 投票:12回答:4

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

windows unix elf coff
4个回答
8
投票

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

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


4
投票

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

编辑:http://atratus.org/似乎也做同样的事情,而不需要Interix / SFU。


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”代表Application,“I”代表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(Beta)”功能
  4. 点击好然后重新启动(必需步骤)
  5. 重新启动后,打开PowerShell /命令提示符并运行“Bash”并按照简单的提示接受Canonical的许可并启动Ubuntu映像的下载
  6. 下载完成后,您将能够从“开始”菜单启动“在Windows上使用Ubuntu进行Bash”

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


1
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.