linux wine 原理,wine的工作原理与自动运行PE程序

一次偶然的情况,发现我电脑上的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 Windows Executables

:windowsPE:M::PE::/usr/bin/wine:

关于wine:

之前一直把wine看成一个windows模拟器,但是wine的全名又傲娇的说自己不是模拟器:Wine Is Not Emulator。

下载了wine的源代码和文档简单看了下,这才了解了wine的工作原理:准确的说,wine是*nix系统上对windows API的开源实现。

wine包含了一个windowsPE程序的loader,用来将windowsPE程序及相关dll库装载到linux进程环境,同时保留维护着windows环境所需要的一些上下文参数。

另外wine中对一些必须重新实现的windows系统dll库使用linux共享库来进行了实现。

如此看来,wine是运行时刻对windowsAPI进行的动态翻译,而不是一个模拟器来模拟windows系统的运行逻辑。

另外,wine还提供了windows常用命令的linux实现,使得用户可以重新编译生成windows命令工具。

关于安全性:

和虚拟机不同,由于运行的程序没有隔离,因此wine的安全性也值得考虑:理论上讲windows病毒是可以通过wine来污染linux环境的,所以至少千万不要用root来运行wine。

相关资料:

https://www.winehq.org/

http://book.51cto.com/art/201211/364983.htm

https://wiki.archlinux.org/index.php/Wine_%28%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87%29

https://www.kernel.org/doc/Documentation/binfmt_misc.txt

http://blog.csdn.net/summerhust/article/details/6097198

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值