看板 Linux 關於我們 聯絡資訊
※ 引述《CrBoy (上大學好忙喔)》之銘言: : ※ 引述《littleboypis (littleboypis)》之銘言: : : 想請教一下 一隻程式是怎麼在OS(Linux/Windows)執行的? : : 在OS上執行 : binary的可執行檔會有他自己的格式 例如在Linux上稱為ELF executable : 在windows上我不敢確定 我都叫他Win32 executable @@" Windows 上的binary分成 .com 跟 .exe ,基本上.com的格式就是 CP/M Execution Binary, 格式很簡單,就是程式碼一率由0x0100 開始執行,由於x86有Segment的概念,所以OS就很簡單的找一塊區 塊把內容放到RAM裡,然後調整CS讓那個BINARY的對應PC剛好為0x0100 然後就給他CALL進去就對了。至於 .exe 則複雜許多,一般我們大 多知道是所謂的PE格式,其實更正確一點應該說是COFF-PE。Windows 下的Lib,DLL,EXE都是COFF格式的檔案。不管是ELF或COFF基本上得 內容都差不多但格式各有其優點。對於格式細節有興趣的人可以去 拜狗就可以得到細節。 : 可以用$ file filename 來取得檔案的相關資訊 這裡有點意思不一樣,一般來講path+filename 只是讓os知道檔案 在哪,至於能不能執行的細節則是在檔案內的標頭欄位內,exe 跟 unix上加了 x的檔案都是很複雜的執行檔,其中包涵目標機器種類 ,二元碼性質描述,是否需要重新連結等等的執行資訊以及可能多 達數段的程式碼與各種不同的材質與資料內容。這些都必需要打開 檔案才能知道的。 : 而作業系統會有loader 負責讀取可執行檔的內容 並載入指令(instructions) : 到記憶體中 接著才會去執行他(細節我也實在不清楚orz : 我認為不只是把Program Counter指過去這麼簡單) 基本上Loader的動作大致如下: 開啟檔案 -> 讀取表頭資訊 -> 分析內容 ---->不可執行或條件不足則跳出回應錯誤(檔案格式/對應平台類) 依照表頭載入並檢核二元資料(程式碼、資料、材質) -->發生錯誤則跳出回應錯誤(檔案內容揪錯) 重新連結執行碼->產生執行緒/任務資訊----->發生錯誤則跳出回應錯誤(系統資源類) 指派cpu time開始執行 -->發生錯誤則跳出回應錯誤(執行階段類) : : 如果在沒有OS上的 又是怎麼一個情況? : 如果沒有OS的 那就是這個程式本身就要可以執行 細節我也不清楚XDDD : 不過硬體都會設計剛啟動的時候 會從ROM的哪個地方開始執行 : 而你就必須以那個地方當作開頭來寫入你的程式(的那些指令) : 最少最少也需要一個jump 讓PC可以跳指到你的程式的主區段 沒有os的話,你就必須確定你的執行碼沒有進行系統呼叫(ex:printf scanf...) 然後使用linker把程式的佈置規劃到rom裡面對應的位置,然後 在CPU 的起始點(0x00000000 或 0xfffffff0)放一個 JMP 跳到 你的ROM 中的程式進入點。然後把這樣的二元檔影像燒到ROM裡 面去,這樣,CPU reset後就會跳進去你的程式碼裡面了。 -- ~~~ 一切的正義在曼尼大神的正義之前均無足輕重 在海賊的砲口下唯有曼尼大神的正義可以私下研究 ~~~ -= WolfLord =- BM4GMR - A23203 - -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.46.218.188
ibmjch:我記得file的確可以告訴你這個檔案是甚麼樣的檔案 11/04 17:48
WolfLord:File只有這個檔有沒有執行權,是不是唯讀而已,沒有細節 11/04 20:25
WolfLord:你可能拿到一個ARM的ELF BIN再X86上,FILE會告訴你這是可 11/04 20:26
WolfLord:以執行的,但是當LOADER載入十才會告訴你:這不是一個可 11/04 20:27
WolfLord:以執行的檔案(FILE CANNOT EXECUTABLE) 11/04 20:28
CrBoy:多謝前輩指導 我又上了一課~!! <(_ _)> 11/04 23:14
CrBoy:只是我的確可以用file來獲得檔案的相關資訊 如格式 平台 11/04 23:15
CrBoy:函式庫的連結方式 有沒有strip過之類的 您說的應該是ls -l ? 11/04 23:16
ibmjch:我的經驗和C大一樣 11/04 23:57
ibmjch:另外這邊的file是指linux裡的ㄧ支程式 不是指一個檔案 11/04 23:58
ibmjch:不知道大大指的file和我們指的file是同一個意思嗎 11/05 00:00
WolfLord:真糟糕,我指的是File system不是file這隻程式 11/05 00:13
WolfLord:而執行這一件事不會去呼叫file這個外掛程式,因為他也需 11/05 00:14
WolfLord:要被執行。所以提出file可以得到檔案屬性就跟大家再討論 11/05 00:15
WolfLord:引擎時突然跟人家說:接CAN就可以知道耗油一樣....CAN的 11/05 00:17
WolfLord:資訊也是跟引擎的ECU問來的,可是引擎裡面也有其他的東西 11/05 00:18
WolfLord:叫CAN啊~~~ 根本是來亂嘛 XDDD 11/05 00:19
WolfLord:換句話說 file 這隻程式跟執行過程毫無關係 XD 11/05 00:21
ibmjch:我想C大想講的是file這支程式可以知道這個檔案是不是 11/05 00:34
ibmjch:ELF executable 的檔案吧 11/05 00:34