一次偶然的情况,发现我电脑上的linux可以直接使用./来执行tools/vnd/BCM7584UPKFxBA/brcm_sign_enc.exe程序,但是另外一台linux电脑就不可以。使用file命令查看该文件是windowsPE格式的程序。由于我电脑上有wine,猜测它是通过wine来执行的,因此 cat /proc/PID/maps,发现确实是被wine执行的,代码段加载了很多wine相关的库。
那么问题来了,一个windowsPE格式的控制台程序,是如何直接通过./被解释执行的呢?经过查阅资料,发现是/proc/sys/fs/binfmt_misc起的作用:
[lubo@localhost binfmt_misc]$ cat windowsPE
enabled
interpreter /usr/bin/wine
flags:
offset 0
magic 5045(注:'P','E'的ascii码)
手动设置:
echo :windows:M::MZ::/usr/bin/wine: > /proc/sys/fs/binfmt_misc/register
echo :windowsPE:M::PE::/usr/bin/wine: > /proc/sys/fs/binfmt_misc/register
开机自动设置的地方在:
[lubo@localhost binfmt.d]$ cat /usr/lib/binfmt.d/wine.conf
# Pre-PE Windows Executables
:windows:M::MZ::/usr/bin/wine:
# PE Win