tft每日頭條

 > 科技

 > 無法執行二進制文件

無法執行二進制文件

科技 更新时间:2024-10-07 23:07:43

為什麼Linux和Windows的可執行文件不能通用?

主要的原因是格式不同和API不同,前者更重要一些。一個可執行的二進制文件包含的不僅僅是機器指令,還包括各種數據、程序運行資源,機器指令隻是其中的一部分。

無法執行二進制文件(一個可執行的二進制文件包含的不僅僅是機器指令)1

一 個可執行文件要被執行的時候,操作系統需要為其分配資源,這些資源包括:内存空間(物理的和虛拟的),進程、線程資源等等,其中可執行文件的機器指令一般 都放在代碼段(彙編語言裡稱之為text段),其它資源可能放到數據段以及其它段裡。

這裡的“段”(segment)可以大緻的理解為一段内存範圍。操作系 統(Windows/Linux)需要知道這個可執行文件需要多大的内存,有多少個段,分别載入到哪些内存地址上。可執行文件需要告訴操作系統,要為可執 行文件準備哪些東西它才能運行。

文章相對比較長,字數比較多,大家可以先打開頭像關注我,之後慢慢看,///插播一條:我自己在今年年初錄制了一套還比較系統的入門單片機教程,想要的同學找我拿就行了免費的,私信我就可以哦~點我頭像左下角黑色字體加我也能領取哦。最近比較閑,帶做畢設,帶學生參加省級或以上比賽///

無法執行二進制文件(一個可執行的二進制文件包含的不僅僅是機器指令)2

可執行文件在執行之前,操作系統要有一些準備工作,因為不同的操作系統,準備工作是不同的,所以可執行文件的格式不完全相同。Windows上大部分可執行文件為PE格式,Linux裡大部分可執行文件為ELF格式。格式不同導緻了不同的可執行文件無法跨平台直接使用。這是原因之一。當然了,我見過網上有大神解決了一些格式不同的問題,但跨平台運行還需要解決另一個障礙,就是操作系統API不同。一個可執行文件所執行的絕大多數操作(比如:文件操作、輸入輸出、内存申請釋放、任務調度等等)都需要與操作系統交互才能完成,而不同的操作系統使用這些操作的方法完全不同,所以這個障礙更難跨越。這是原因之二。如 果能解決以上兩個原因,那麼有些可執行文件理論上是可以跨Windows和Linux在x86平台上運行的,因為Intel和AMD的CPU裡,主要的硬 件指令(機器指令)是相同的,也就是說0101這種二進制數,是一樣的。但是如果切換到ARM平台,會有更大的麻煩就是硬件指令也不同,那麼就完全沒辦法 了。

無法執行二進制文件(一個可執行的二進制文件包含的不僅僅是機器指令)3

對單片機感興趣的朋友可以找我,我錄制了一些關于單片機的入門教程,有需要的童鞋找我拿就行,免費的,私信我“林老師”就可以拿~點擊打開我的頭像就能領取

有沒有可能有跨平台運行的可執行文件呢,理論上是存在的,過去的時候也有一些辦法,但限制極多,比如Windows過 去是支持COM格式的文件的,這個文件就沒有文件頭,大小不能超過64K,隻能在一個16位環境裡(真實的或者虛拟的)運行,是真正的裸二進制文件。 Linux裡某些BIN文件恰好也是裸二進制文件(有些BIN文件沒有ELF頭,但不是所有的BIN都是這樣的)。

經過一些配置以後BIN文件也是可以在 Linux上運行的。于是某些精巧設計的COM/BIN文件可以在限制極多的情況下跨平台運行,但也許隻能做計算,無法做輸出,大小也隻有64K大,并且 如果要做稍微複雜點的操作,就需要兩套機器代碼實現。另外,很不幸的是64位環境裡COM文件已經不再支持了。

好了,這期就到這裡了,覺得對屏幕前的你有幫助的麻煩一鍵三連

無法執行二進制文件(一個可執行的二進制文件包含的不僅僅是機器指令)4

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关科技资讯推荐

热门科技资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved