星期一, 12月 12, 2005

 

Linux: binfmt_misc

在Linux環境中, 可以支援額外的執行檔格式.

這種功能就是由 binfmt_misc 模組所提供的

先載入模組 modprobe binfmt_misc
如果要系統可以直接執行windows 的.exe 檔,則執行下面這命令
echo ':Wine:M::MZ::/usr/bin/wine:' > /proc/sys/fs/binfmt_misc/register
這樣便可以對系統註冊此格式

欄位順序

名稱

意義

1

Name

產生在 “/proc/sys/fs/binfmt_misc” 目錄下的檔案名稱,用來識別所支援的執行檔環境

2

Type

M 表示透過比對檔頭來辨認執行檔

E 表示透過延伸的副檔名來辨認執行檔

3

Offset

用來標示比對檔頭資料所偏移的位置,通常為0,表示由檔頭的起始位置開始比對

4

Magic

所要比對的檔頭資料或是副檔名的名稱

5

Mask

可以用來mask部分比對字串的位元,通常不使用

6

Interpreter

指向我們所要採用的載入器,而我們使用的執行檔會成為這個載入器的第一個變數


每個欄位用 : (冒號)隔開

格式為: :name:type:offset:magic:mask:interpreter:

那如何清除已經註冊的格式呢?
echo -1 > /proc/sys/fs/binfmt_misc/status

如何停止使用此模組呢(非移除)?
echo 0 > /proc/sys/fs/binfmt_misc/status

如何由停止狀態啟動此模組呢?
echo 1 > /proc/sys/fs/binfmt_misc/status

我在我的Mandriva 上面寫了一個啟動script檔 /etc/init.d/binfmt_misc


#!/bin/sh
#
# Startup script for binfmt_misc
#
# description: Linux binfmt_misc script
# See how we were called.
case "$1" in
start)
echo "Starting binfmt_misc: "
if [ ! -e /proc/sys/fs/binfmt_misc ]; then
/sbin/modprobe binfmt_misc
fi
echo 1 > /proc/sys/fs/binfmt_misc/status
if [ -e /proc/sys/fs/binfmt_misc ]; then
echo ':Wine:M::MZ::/usr/bin/wine:' > /proc/sys/fs/binfmt_misc/register
echo ':Java:M::\xca\xfe\xba\xbe::/usr/local/bin/javawrapper:' > /proc/sys/fs/binfmt_misc/register
#echo ':HTML:E::html::/usr/local/java/bin/appletviewer:' > /proc/sys/fs/binfmt_misc/register
#echo ':Applet:M::

This page is powered by Blogger. Isn't yours?