2010-02-05 27 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

相關問題