使用wine在ubuntu上运行和制作deb安装包

本文介绍了Wine如何在Linux环境下模拟Windows API,通过解析PE文件和实现ntdll.dll的部分或全部API来运行Windows程序。讨论了如何在Linux内核中模拟Windows句柄,并提供了配置Wine环境、安装依赖、打包DEB软件包的步骤。通过实例展示了将Windows应用程序转化为Linux DEB包的过程。
摘要由CSDN通过智能技术生成

wine原理

wine通过在linux上模拟windows的API,加载并运行windows程序。那么,wine具体是如何实现的?

windows和linux,作为典型的PC操作系统,分为内核态的系统调用和用户态的API。linux上,用户态的API通过glibc来条用系统调用(int 0x80), windows通过ntdll.dll来调用内核态(syscall, 最早也是int中断)。

所以在linux上模拟windows的api是可能的,只要实现了ntdll的API兼容实现(部分或者全部),在通过对PE文件的拆解和定位,就可以将所有的调用通过树状结构汇总到ntdll。

然而是线上,还是相当工作需要执行,比如如何在用户态或者linux内核其他对象来模拟windows的句柄概念(windows内核对象的访问方式)?

初始化windows执行基础环境

$ WiNEPREFIX=/home/.mine/win7 wine winecfg

安装依赖库

$ WINEPREFIX=/home/.mine/win7 winetricks vcrun6

测试验证程序

$ WINEPREFIX=/home/.mine/win7 wine registry.exe

deb打包

deb打包有详细的debian文档支持,这里从一个已有的deb包作为base来打包。
deb打包需要在DEBIAN目录下修改至少以下3个文件:

DEBIAN/control
DEBIAN/postinst
DEBIAN/md5sums

下载一个deb包,这里以tdx的deepin包为例,通过dpkg-deb命令解包和提取配置信息。

参考 基于deepin-wine的windows软件打包deb安装包教程(本實例安裝qq)

准备files.7z

将win7的运行基础环境通过7z压缩,注意目录前缀(确保drive_c在第一级)
替换opt子目录下的files.7z。用以下脚本打包:

#!/bin/bash
cd env 
7z a ../extract/opt/apps/com.hd.deepin/files/files.7z *
cd ..
find extract/opt -type f -print0 |xargs -0 md5sum > extract/DEBIAN/md5sums
dpkg-deb --build extract/ build/

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值