LINE: run elf in windows

來源:互聯網
上載者:User

最近有那麼一個想法,要開發一個東西叫LINE。我們都知道linux上有一款很牛逼的軟體叫WINE(WINE Is Not Emulater),可以在linux上運行windows程式。LINE(LINE Is Not Emulater)就是WINE的反面,讓linux程式在windows上運行。http://gussing.cnblogs.com/

WINE之所以可行是基於這麼一個事實:windows程式都是建立在windows API基礎之上的,ntdll.dll, kernel32.dll, user32.dll等api把windows系統調用全部封裝起來,基於API的應用程式可以完全不知道核心的細節。WINE就幹了兩件事情:1.開發一個PE loader可以load windows程式,2.開發一整套windows api供windows程式使用。據我所知,WINE牛逼到了絕大多數windows API都已經實現的程度。WINE的大體架構如下:http://gussing.cnblogs.com/

後來又出現一個叫“相容核心”的項目,他們打算把WINE代碼裡有系統調用的部分全部移入核心。我們知道linux系統調用和windows系統調用是不可能一一對應的,比如說NtCreateProcessEx系統調用想在linux上實現,可能會有不止一個linux系統調用。倘若把windows系統調用直接在linux核心裡實現,那麼次數就會減少到1,效率就會提高。另外,使用者態很難辦到的一些事情在核心態核心匯出函數的協助下,也會變得相對容易些。有相容核心之後的大體架構如下:http://gussing.cnblogs.com/

如所示,相容核心修改了WINE DLL, 把“用linux系統調用類比windows DLL”的機制換成了"在linux上打通int 2e,類比出原生windows DLL”。http://gussing.cnblogs.com/

而LINE之所以(被我認為)可行,是基於這麼一個事實:大多數linux程式都是基於glibc之上的,與windows api類似,glibc封裝了linux的系統調用,如果可以把linux系統調用介面實現一遍,那麼glibc應該就能運行在windows上,相應的大多數*原生*linux程式也可以在windows上運行。http://gussing.cnblogs.com/

 這裡不得不提一款幾乎類似的程式:cygwin。cygwin在windows上類比了glibc的功能,叫做cygwin1.dll,通過port到windows上的gcc.exe把帶原始碼的linux程式都重新編譯一遍,也做到了在windows上運行linux程式,如所示:http://gussing.cnblogs.com/

大體架構和WINE有異曲同工之妙,但是也有很明顯不一樣的地方,那就是cygwin啟動並執行是PE格式的linux程式,省掉了做elf loader的麻煩。為什麼WINE不編譯一套elf格式的windows程式呢?很簡單,因為沒有原始碼。http://gussing.cnblogs.com/

最後講一講我預想中LINE的架構:http://gussing.cnblogs.com/

如所示,先得有一個elf loader,把原生linux程式load進程空間裡,原生linux程式要和glibc打交道,所以也要把glibc load進來。glibc有兩部分,一部分在使用者態就能做完,一部分需要通過系統調用進入核心,所以LINE裡有一個核心態驅動,實現了int 80系統調用的支援。linux裡有300多個系統調用,我一個人全部做完是不可能的,且不說時間不夠,有些調用根本困難的要命,所以系統調用常式被分為兩部分:一部分在核心裡實現,一部分未實現。未實現的部分就用APC彈回到使用者態,從cygwin1再走一遍。

如此一來,LINE就和WINE一樣,可以執行*原生*linux程式了。其實最開始我還想著另一種路徑,那就是直接修改cygwin讓它走int 80 路徑,這麼一來glibc相關的一系列討厭的問題(相信我,還真是很多很討厭)都可以避免的,還可以最大限度利用已有資源。不過這條路徑少elf loader和runtime lib,能學到的東西就會少很多,所以被我否掉了。http://gussing.cnblogs.com/

LINE這個項目我一直是利用業餘時間在做,不知道能到什麼程度。有時候想想,連我自己都很期待呢哈哈。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.