Linux上的COFF或Windows上的ELF

PJT*_*PJT 14 unix windows coff elf

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

Mic*_*lon 8

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

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


Mic*_*h W 7

为了正确回答您的问题,有必要检查一下ELF,COFF和PE是什么。这些二进制格式实际上只是容器,这些容器向操作系统提供有关如何执行文件中包含的原始CPU指令的指导。它们非常类似于MKV,WMV和OGG等音频/视频容器。操作系统中是否支持可执行格式。直到最近,Microsoft Windows一直未提供对COFF或ELF的任何支持。在Windows 10中,Microsoft通过内置于Windows内核UserMode-Linux兼容的系统例程中,为ELF提供了间接支持。UserMode Linux内核在Windows内核之上运行,并且几乎像独立于MS Windows一样运行所有ELF二进制格式。

Microsoft使用UserMode-Linux(子内核)以完全兼容的格式重写大多数Linux API的替代方法,他们的选择解决了另一个兼容性问题: API。“ A”代表应用程序,“ I”代表接口,但是作为接口的API主要只是一组可执行例程和环境假设。Windows内核提供对文件系统和大多数基本系统例程的访问,而UserMode Linux内核提供了其他所有功能。这样,Windows不仅可以运行ELF格式的可执行文件,而且还可以运行已经在Linux API上运行的最受欢迎的ELF可执行文件。

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

要安装UserMode-Linux环境,您可以按照Microsoft开发网络上提供的说明进行操作。总结一下:

  1. 开启开发人员模式:设置| 更新和安全| 对于开发人员| 检查开发人员模式单选按钮
  2. 在开始菜单中,打开“打开或关闭Windows功能”
  3. 向下滚动并检查“ Linux的Windows子系统(测试版)”功能
  4. 单击确定并重新启动(必需步骤)
  5. 重新启动后,打开PowerShell /命令提示符并运行“ Bash”,然后按照简单的提示接受Canonical的许可并开始下载Ubuntu映像
  6. 下载完成后,您可以从“开始”菜单启动“ Windows上的Ubuntu上的Bash”

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