跳至正文

Yen-Chin, Lee

關於 Emacs、Clojure、Linux 與開發工具的筆記。

coldnew's blog
本頁目錄

透過 binfmt_misc 讓 Linux 可以執行不同格式的執行檔

發表於

binfmtmisc 是 Linux 提供支援額外的執行檔格式的方法。舉例來說,我們想在 Linux 裡面執行 Microsoft Windows 的 .exe 執行檔,都會透過 wine 這套軟體來執行,於是我們執行程式的 指令就變成

coldnew@Rosia ~ $ wine application.exe

有沒有方法可以直接使用 Linux 執行程式的方式來執行 .exe 程式呢?透過 binfmtmisc 就可以辦到, 首先先載入 binfmtmisc 模組

coldnew@Rosia ~ $ sudo modprobe binfmt_misc

接著用以下指令註冊資訊到系統,這個命令可以讓 Linux 直接執行 .exe 程式 (還是透過 wine)

coldnew@Rosia ~ $ sudo echo ':Wine:M::MZ::/usr/bin/wine:' > /proc/sys/fs/binfmt_misc/register

接著你就可以用以下方式來執行 .exe 的執行檔

coldnew@Rosia ~ $ ./application.exe

binfmtmisc 註冊資訊格式

binfmtmisc 註冊資訊的格式為 (各欄位用 : 隔開)

:Name:Type:Offset:Magic:Mask:Interpreter:

其內容如下

名稱用途
Name產生在 /proc/sys/fs/binfmtmisc 目錄下的檔案名稱,用來識別所支援的執行檔環境
TypeM 代表透過比對標頭檔(Header)來辨認執行檔
E 代表透過延伸的副檔名來辨認執行檔
Offset用來表示比對標頭檔(Header)資料所偏移的位置,通常為 0,表示由檔案開頭進行比對
Magic要比對的檔頭資料或是副檔名的名稱
Mask用來 Mask 比對字串的位元,通常不使用
Interpreter指派我們執行該程式所使用的載入器,該程式將成為載入器的第一個參數

透過 proc 來修改註冊過的資訊

我們可以使用以下幾種方式來修改註冊過的資訊

  • 清除已經註冊過的資訊
Rosia coldnew # echo -1 > /proc/sys/fs/binfmt_misc/status

  • 停用模組
Rosia coldnew # echo 0 > /proc/sys/fs/binfmt_misc/status

  • 啟用模組
Rosia coldnew # echo 1 > /proc/sys/fs/binfmt_misc/status

事實上 binfmtmisc 的好處不是只有讓你可以在指令行直接執行 *.exe 的執行檔, 透過他我們還可以 chroot 到 arm 平台的 linux root filesyetem, 這邊的步驟將在 在 x86 下 chroot 到 ARM 平台的 rootfs 一文進行說明。

© 2012–2026 Yen-Chin, LeeRSSPowered by Astro