天天看點

《作業系統真象還原》——0.14 為什麼Linux系統下的應用程式不能在Windows系統下運作

本節書摘來自異步社群《作業系統真象還原》一書中的第0章,第0.14節,作者:鄭鋼著,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視

其實,windows下的程式也無法直接在linux下運作。

對于這個問題,很多同學都會馬上給出答案:格式不同。其實……答對啦,确實是格式不同,不過這隻是一方面,還有另一方面,系統api不同,api即application programming interface,應用程式程式設計接口。

先說說格式。其實格式也算是協定,就是在某個固定的位置有固定意義的資料。linux下的可執行程式格式是elf,也就是 “executable and linking format”平時咱們用readelf指令可以檢視elf檔案頭,裡面有節(section)資訊、段(segment)資訊、程式入口(entry_point)、哪個段由哪些節組成等資訊。

而windows下的可執行程式是pe格式(portable executable,可移植的可執行檔案),因為我沒了解過,是以具體檔案頭咱們就不關注了,有興趣的同學自行檢視。

那如果linux支援了pe格式就可以運作wndows程式了嗎?也不行,因為在上面說過了,還有系統api不同。linux中的api稱為系統調用,是通過int 0x80這個軟中斷實作的。而windows中的api是存放在動态連結庫檔案中的,也就是windows開發人員常說的dll,即dynamic link library 的縮寫。ll是一個庫,裡面包含代碼 和資料,可供使用者程式調用,dll不是可執行檔案 ,不能夠單獨運作。也就是說,linux中的可執行程式獲得系統資源的方法和windows不一樣,是以顯然是不能在windows中運作的。

除以上原因外,這還和編譯器、标準庫有關,不再列舉。

繼續閱讀