2009-12-12 21 views
11

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

+0

[基于UNIX的应用程序子系统概述](http://technet.microsoft.com/en-us/library/cc771672.aspx#BKMK_PortAppsSUA)[http://en.wikipedia.org/wiki/Microsoft_Windows_Services_for_UNIX] (http://en.wikipedia.org/wiki/Microsoft_Windows_Services_for_UNIX) – abmv 2009-12-12 07:57:39

+0

SFA/SUA只运行为NT编译的PE可执行文件。 – ephemient 2009-12-14 03:49:25

回答

7

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

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

+0

正如我在另一个回答中所评论的,http://sf.net/projects/line/试图成为WINE的反面,在Windows上运行未经修改的Linux二进制文件。这个项目多年来一直被放弃,但它绝对表明这个概念是可能的。如果我没有记错,它可以运行一些静态连接的控制台程序,并且IPC正在运行。 – ephemient 2009-12-16 02:27:02

1

COFF最初是由UNIX介绍(约系统V或左右),所以,是的,一些UNIX可能仍然支持COFF格式。至少在一段时间内,它已被Linux所弃用,并且大概其他大多数Unices也被弃用或彻底放弃支持。

的Windows ELF的支持更多的是有点玄乎 - 几乎肯定不会有没有一些深层次的挂羊头卖狗肉。你应该更具体的了解你想在这里做什么?

+1

http://sf.net/projects/line/确实能够在Windows上加载ELF可执行文件 - 对于有动机的人来说,这可能是一个很好的起点。 – ephemient 2009-12-14 04:22:31

2

要正确地回答你的问题,这是有关回顾一下ELF,COFF,和PE是。这些二进制格式实质上就是容器,它们为操作系统指示如何执行文件中包含的原始CPU指令。它们非常像音频/视频容器,如MKV,WMV和OGG。对可执行格式的支持是在操作系统中或不是。直到最近,微软Windows始终没有给予任何对COFF或ELF的支持。在Windows 10中,Microsoft通过构建Windows内核UserMode-Linux兼容系统例程,为ELF提供间接支持。 UserMode Linux内核运行在Windows内核之上,运行所有ELF二进制格式,就像运行独立于MS Windows一样。

的替代使用用户模式Linux的(子内核)是为微软重写了大部分的Linux API的完全兼容的格式,自己选择一个解决其他兼容性问题:的API。 “A”代表应用程序,Interface代表“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's Development Network上提供的说明进行操作。总结:

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

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

+0

我应该回答问题的另一半。在Linux上运行PE(Windows可执行文件)有各种方法,因为Linux内核可以扩展来识别特定的字节格式,然后运行适当的包装程序。因此,Linux可以在单声道运行时(.NET/C#应用程序)或WINE运行时(Win32 C/C++)中运行一些PE程序。 – 2017-12-21 14:39:13