Portál AbcLinuxu, 2. května 2025 04:43
petr@cz2cbjmc:/mnt/win/Program Files/Vim/vim63 $ file vim.exe vim.exe: MS-DOS executable (EXE), OS/2 or MS Windows petr@cz2cbjmc:/mnt/win/Program Files/Vim/vim63 $ ./vim.exe --version |head -n 2 VIM - Vi IMproved 6.3 (2004 June 7, compiled Jun 7 2004 14:13:59) 32 bitová verze pro MS Windows konzolu
Ne, to není kouzlo, to je binfmt_misc!
petr@cz2cbjmc:/mnt/win/Program Files/Vim/vim63 $ ls -l vim.exe -r-xr-xr-x 1 root root 1042432 2004-06-07 14:14 vim.exe petr@cz2cbjmc:/mnt/win/Program Files/Vim/vim63 $ file vim.exe vim.exe: MS-DOS executable (EXE), OS/2 or MS Windows petr@cz2cbjmc:/mnt/win/Program Files/Vim/vim63 $ hexdump -C -n 5 vim.exe 00000000 4d 5a 90 00 03 |MZ...| 00000005 petr@cz2cbjmc:/mnt/win/Program Files/Vim/vim63 $ su Password: root@cz2cbjmc:/mnt/win/Program Files/Vim/vim63 # cd /proc/sys/fs root@cz2cbjmc:/proc/sys/fs # modprobe binfmt_misc root@cz2cbjmc:/proc/sys/fs # mount none -t binfmt_misc /proc/sys/fs/binfmt_misc root@cz2cbjmc:/proc/sys/fs # cd binfmt_misc/ root@cz2cbjmc:/proc/sys/fs/binfmt_misc # ls register status root@cz2cbjmc:/proc/sys/fs/binfmt_misc # echo ':DOSWin:M::MZ::/usr/bin/wine:' > register root@cz2cbjmc:/proc/sys/fs/binfmt_misc # ls DOSWin register status root@cz2cbjmc:/proc/sys/fs/binfmt_misc # cat DOSWin enabled interpreter /usr/bin/wine flags: offset 0 magic 4d5a root@cz2cbjmc:/proc/sys/fs/binfmt_misc # exit petr@cz2cbjmc:/mnt/win/Program Files/Vim/vim63 $ ./vim.exe --version |head -n 2 VIM - Vi IMproved 6.3 (2004 June 7, compiled Jun 7 2004 14:13:59) 32 bitová verze pro MS Windows konzolu petr@cz2cbjmc:/mnt/win/Program Files/Vim/vim63 $
Následující text je volným překladem dokumentace k jadernému modulu binfmt_misc, jenž dlí ve zdrojácích Linuxu v souboru Documentation/binfmt_misc.txt. Jeho autorem je Richard Günther.
Tato funkce jádra vám umožní pustit téměř každý program (omezení jsou popsána níže) pouhým napsáním jeho jména do shellu.
Abyste toho dosáhli, musíte říci binfmt_misc, který interpretr má být aplikován na kterou binárku. Binfmt_misc rozpozná druh binárky porovnáním několika prvních bytů souboru s magickou sekvencí, kterou mu před tím poskytnete. Binfmt_misc se také umí řídit podle přípon souboru, jako jsou .com nebo .exe.
Nejprve připojíte pseudosouborový systém binfmt_misc:
mount none -t binfmt_misc /proc/sys/fs/binfmt_misc
Pak zaregistrujete nový binární typ. Pro to musíte sestavit řetězec ve tvaru :jméno:metoda:offset:magic:maska:interpretr:příznaky (pokud budete potřebovat, můžete místo znaku : (dvojtečka) použít něco jiného) a zapsat jej do /proc/sys/fs/binfmt_misc/register.
Tady je význam jednotlivých políček:
Dobře si rozmyslete v jakém pořadí zaregistrujete jednotlivé formáty. Uplatní se totiž poslední vyhovující záznam (záznamy jsou prohledávány pozpátku).
Následuje pár příkladů (za předpokladu, že se nacházíte v /proc/sys/fs/binfmt_misc):
Přidá podporu pro em86:
echo ':i386:M::\x7fELF\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00 \x03:\xff\xff\xff\xff\xff\xfe\xfe\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfb\xff\xf f:/bin/em86:' > register echo ':i486:M::\x7fELF\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00 \x06:\xff\xff\xff\xff\xff\xfe\xfe\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfb\xff\xf f:/bin/em86:' > register
Zapne podporu pro komprimované dosové aplikace (musíte mít nakonfigurované dosemu):
echo ':DEXE:M::\x0eDEX::/usr/bin/dosexec:' > register
Umožní spouštět windowsí aplikace přes Wine:
echo ':DOSWin:M::MZ::/usr/local/bin/wine:' > register
Jak spouštět javové programy je popsáno v Documentation/java.txt.
Podporu pro jednotlivé formáty nebo celý binfmt_misc můžete zakázat nebo povolit zapsáním 0 nebo 1 do /proc/sys/fs/binfmt_misc/jméno resp. /proc/sys/fs/binfmt_misc/status. Současný stav získáte vypsáním daného souboru.
Odregistrování konkrétního binárního formátu lze provézt zapsáním -1 do příslušného souboru. Chcete-li smazat všechny záznamy, zapište ji do /proc/sys/fs/binfmt_misc/status.
Pokud potřebujete předávat interpretru další parametry, napište si wrapper (příklady jsou v Documentation/java.txt).
Interpretr by neměl vyhledávat spouštěný soubor v proměnné prostředí PATH; jádro mu samo předá celou cestu (nebo deskriptor). Použití PATH může přinést neočekávané chování včetně bezpečnostních chyb.
Projektu binfmt_misc se také věnuje webová stránka http://www.tat.physik.uni-tuebingen.de/~rguenth/linux/binfmt_misc.html.
Tiskni
Sdílej:
aptitude install wine binfmt-support
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.