2010-02-05 54 views
2

我记得几年前(2002年)有一个多部分病毒,可以在Linux和Windows上本机运行。我不知道一个编译器是否可以专门制作一个可执行文件,以便它可以同时作为ELF和PE读取,以便操作系统可以在不同的入口点执行。或者一个程序可以合并两个程序,一个使用mingw编译,一个使用本地linux编译,一个程序。是否可以编译可以在Linux窗口中运行的本机可执行文件的跨平台编译器?它能存在吗?

我不知道这样的程序是否存在,或者它是否存在,我知道这可以用Java或某种脚本语言实现,但这不是本地程序。想象一下可能性,我可以用linux和window(也许是os/x)库部署一个程序,以及一个可以在任何操作系统上运行的主要可执行文件。跨平台支持将弥补更大的规模。

+1

我最近在这里回答了这个问题:http://stackoverflow.com/questions/2082336/has-anyone-been-able-to-create-a-hybrid -of-pe-coff-and-elf/2083161#2083161 – caf 2010-02-05 04:06:25

+0

@caf,谢谢你的回答,coff怎么样?在linux中可能吗? – TiansHUo 2010-02-05 05:34:05

+0

在Linux中,您可以编写binfmt模块来支持您喜欢的任何二进制格式,但唯一支持的格式是'ELF'和'a.out'。 – caf 2010-02-05 05:53:00

回答

2

Windows程序在开始时有一个DOS存根,我刚刚通过debug.com运行了一个ELF可执行文件,它说这个exe的第一个指令是JG 0x147。只是也许可以做些什么...

+0

问题是,Windows忽略pe文件中的这个dos存根。但这很有趣,因为我们甚至可以实现对dos的支持。考虑一下,这是一个多平台支持的脚本语言解释器。然后我们可以使用一个二进制文件,几个库和用户脚本来部署。 – TiansHUo 2010-02-05 03:30:49

+1

但是,如果它被命名为具有.com扩展名,并且没有MZ签名,则Windows(32位)会尝试将其作为16位DOS程序运行。 – 2010-02-05 03:56:50

2

Windows和Linux使用完全不同的二进制文件格式。请参阅Portable Executable(Windows)和Executable and Linkable Format(Linux)。

类似WINE会在Linux上运行Windows可执行文件,但这不是同一回事。

+0

我知道,但我在想如果有一种方法来调整参数(即使它意味着一些不重要的错误),以便我们可以有一个可运行的可执行文件,我们可以有不同的入口点,因此我们可以将代码适用于不同细分市场的Linux和窗口。也许使用coff格式? – TiansHUo 2010-02-05 03:27:40

+0

答案仍然没有。格式不兼容。 – cletus 2010-02-05 03:35:09

+0

http://www.symantec.com/security_response/writeup.jsp?docid = 2002-052915-3340-99 – TiansHUo 2010-02-05 03:58:22

0

这实际上是多种原因一个非常可怕的想法。

  1. 跨操作系统边界的交叉编译非常难以正确执行。
  2. 如果你选择第二条路径(在Windows上构建单独的PE二进制文件,在Linux上构建ELF,然后以某种方式合并它们),则必须维护两台机器,每台机器运行不同的操作系统和完整的构建堆栈,必须确保您在将它们粘合在一起之前分别测试了两个版本。
  3. 动态链接已经妥善管理,在Windows 在Linux上的痛苦;静态链接可能会产生更难处理的二进制文件,而不是您提供单一文件类型给您的最终用户所带来的任何虚拟益处。

如果你想运行多个操作系统相同的二进制可执行文件,你的选择是Java,单声道,并有可能NativeClient,浏览器插件谷歌的发展来解决“的webapps太慢”的问题。

+0

所以你说os和app之间的某种虚拟化(JVM等)要好得多。但是你还没有回答这个问题,我在问是否可能,而不是这个问题是困难的还是值得的。 要走第二条路线似乎是可能的,你仍然必须保持跨平台的二进制文件。但问题是有一个程序将这些程序粘合在一起? – TiansHUo 2010-02-05 03:25:12

相关问题