Wine的调试方法

news2024/11/26 22:32:20

wine的运行管理

# 运行exe程序
wine <exe程序>

# 运行msi程序
wine msiexec /i <msi程序>
wine start <msi程序>

# 静默安装
wine <exe程序> /q /doNotRequireDRMPrompt /noupdate

# 杀掉wine进程
wineserver -k
pkill wine

配置wine

配置环境变量

# 配置虚拟c盘路径,通常称为容器目录
export WINEPREFIX=<容器目录>

# 配置容器架构
WINEARCH=win32

# 配置DLL: b表示内置,n表示原生,配置为空或d时表示不加载dll
WINEDLLOVERRIDES="comdlg32=b,n;shell32=b;comctl32=n;oleaut32="
# 配置不加载mono和gecko
WINEDLLOVERRIDES="mscoree=d;mshtml=d"

# 配置debug
WINEDBG=trace+loddll,+cursor

# 配置dll搜索路径
WINEDLLPATH=<dll搜索路径>
WINEPATH=<dll搜索路径>

# 配置wineserver的加载路径
WINESERVER=<wineserver路径>

# 配置wineloader的加载路径
WINELOADER=<wineloader的路径>

# 配置3D渲染引擎
WINE_D3D_CONFIG="renderer=vulkan;VideoPciVendorID=0xc0de"

配置DLL

1.使用winecfg命令打开wine的控制面板:

winecfg

image.png

2.在wine中,dll分为原生dll和内置dll,原生dll就是Windows dll,内置dll就是wine生成的伪dll,可以配置搜索顺序,方法如下:

image.png

image.png

配置控制面板

# 控制面板
wine control

# 卸载程序
wine uninstaller

配置winetricks

下载winetricks:

wget https://raw.githubusercontent.com/Winetricks/winetricks/master/src/winetricks
chmod +x winetricks
sudo apt install cabextract

查看winetricks中存在的软件:

./winetricks list-all

使用winetricks安装软件:

./winetricks corefonts vcrun6 

配置注册表

查看/修改注册表

# 打开注册表
wine regedit

# 修改注册表后重启wine
wine reboot

配置Windows环境变量
修改HKEY_CURRENT_USER/Control Panel/Environment项。

配置binfmt

/etc/ 的优先级最高、 /run/ 的优先级居中、 /usr/lib/ 的优先级最低。

# wine
sudo sh -c 'echo ":DOSWin:M::MZ::/usr/bin/wine:" > /etc/binfmt.d/wine.conf'

# box86
sudo sh -c 'echo ":x86:M::\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x03\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/box86:" > /etc/binfmt.d/box86.conf'

通用调试方法

对比分析法

查看论坛:
UOS论坛
Deepin论坛
ukylin/openkylin论坛
winehq
deepin-wine资源
Deepin Wiki - 深度百科
统信UOS:Deepin-Wine适配知识库

对比不同的wine:
deepin-wine,winehq-stable,winehq-staging,crossover。

正向分析法

wine调试脚本

# 向`~/.bashrc`中追加`test_wine`别名。如果不设置别名,会影响其他wine或者crossover的启动。
alias test_wine='
export WINEARCH=win32 
export WINEPREFIX=$HOME/.wine 
export WINEDEBUG=+loaddll,+timestamp
export WINEDLLOVERRIDES="mscoree=d;mshtml=d"
export WINEDIR=$HOME/work/wine-wrapper/wine/wine-hq/stable/release/usr/local/bin
export WINE=$WINEDIR/wine
alias wine=$WINEDIR/wine
alias wineserver=$WINEDIR/wineserver
alias winedbg=$WINEDIR/winedbg
alias winetricks=$HOME/work/wine-wrapper/scripts/winetricks/winetricks
alias wecom="wine $WINEPREFIX/drive_c/Program\ Files\ \(x86\)/WXWork/WXWork.exe"
alias wechat="wine $WINEPREFIX/drive_c/Program\ Files/Tencent/WeChat/WeChat.exe"
'

#  刷新当前终端的bashrc脚本
source ~/.bashrc

# 调试时,在终端启用test
test

# 测试,运行wine和wineserver
wine notepad
wineserver -k

log调试法

分析思路:
通过createWindow查找主进程和主线程id,
跟踪主进程id,查看主进程进度。

log通道用法如下,详情见Debug_Logging:

# ------------输出log------------

# 默认输出`fixme`和`error`信息
export WINEDBG=+all     输出所有通道
+relay                  输出所有函数的参数及返回值
trace+loddll,+cursor    loaddll模块额外输出trace信息,cursor正常输出
warn-file               file通道不输出warn等级的log

过滤log:

wine notepad 2>&1 | grep dll

逆向分析法

winedbg调试法:
wine中的进程有Windows进程、Windows线程和Linux线程三部分,通过winedbg命令可以查看并附加到进程:

# 启动debug
winedbg 

# 查看Windows进程信息
info process

# 附加到进程
attach <process-id>

# 单步调试
si
ni

另一种启动调试的方法:

winedbg telnet.exe

调试参数及方法可以参考:Debugging_Wine、gdb调试笔记、逆向分析

其他方法

联系相关的技术人员、领导、社区等人寻求帮助。
百度、谷歌、论文、专利、技术论坛、淘宝、qq群。

常见问题

参考:WINE常见问题总结

参考链接

Debug Channels
wine用户手册
Wine
wine命令
Useful Registry Keys
Wine User’s Guide

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/760021.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

GD32f103系列外部晶振更改

GD32f103系列的芯片现在基本很普通了&#xff0c;外部很多资料都是使用8MHz晶振为CPU提供主频。很多的时候由于项目的原因&#xff0c;外部晶振会更换不同的频率&#xff0c;有4MHz或者12Mhz的&#xff0c;因此需要在系统文件中做一些更改。 以8MHz晶振转12MHz晶振为例&#x…

Redis(三)存储原理与数据模型(hash冲突、渐进式rehash)

Redis系列文章 Redis&#xff08;一&#xff09;原理及基本命令&#xff08;柔性数组&#xff09; Redis&#xff08;二&#xff09;网络协议和异步方式&#xff08;乐观锁&悲观锁&#xff09; Redis&#xff08;三&#xff09;存储原理与数据模型&#xff08;hash冲突、渐…

chatGPT指令大全可免费使用网站列表chatGPT4试用方案

指令列表 写作助理 &#x1f449; 最常使用的 prompt&#xff0c;用于优化文本的语法、清晰度和简洁度&#xff0c;提高可读性。作为一名中文写作改进助理&#xff0c;你的任务是改进所提供文本的拼写、语法、清晰、简洁和整体可读性&#xff0c;同时分解长句&#xff0c;减少…

【CesiumJS入门】(7)绘制多段线(动态实时画线)

前言 鼠标左键添加点、右键完成绘制,单击右侧弹窗关闭按钮清空绘制。参考沙盒示例&#xff1a;Drawing on Terrain 直接上代码了 /** Date: 2023-07-12 18:47:18* LastEditors: ReBeX 420659880qq.com* LastEditTime: 2023-07-16 16:26:19* FilePath: \cesium-tyro-blog\s…

【动手学深度学习】--07.数值稳定性、模型初始化、激活函数

文章目录 数值稳定性、模型初始化、激活函数1.数值稳定性1.1举例1.2数值稳定性的常见两个问题1.3梯度爆炸1.4梯度消失1.5打破对称性 2.模型初始化2.1让训练更加稳定2.2权重初始化2.3Xavier初始 3.激活函数 数值稳定性、模型初始化、激活函数 学习视频&#xff1a;数值稳定性 …

vue3后台管理系统实现动态侧边导航菜单管理(ElementPlus组件)

记住 一级(el-sub-menu)的都是只是展示的 点击跳转的都是一级下的子级(el-menu-item) 完整展示 1:在登陆功能进行登陆 获取menu列表 注册路由表的时候 把文件进行创建好 因为注册的方法需要获取这个路径 整个router下的main product等等都要创建 //1:发送你的用户名和密码获…

Linux--进程终止

一、进程终止时&#xff0c;操作系统做了什么&#xff1f;&#xff1f; 释放进程申请的相关内核数据结构和对应的代码和数据 本质就是释放系统资源&#xff08;最主要的资源是内存&#xff09; 二、进程终止的常见方式&#xff1f; a.代码跑完&#xff0c;结果正确 b.代码跑完&…

【我的2023上半年总结】感谢CSDN:第一次100w+阅读,赚大了!

大家好&#xff0c;这里是程序员晚枫。 因为工作一般都是996的原因&#xff0c;今天是2023上半年少有的周六休息日&#xff0c;正好看到平台的#2023年中总结#活动&#xff0c;赶紧来分享一下这半年的自媒体收获~ 主要说一些开心的事情 1、CSDN CSDN账号&#x1f449;Python…

MySQL的循环语句分析

1.while循环 复制 -- 设置mysql分隔符为//,也就意味着,当遇到下一个//时,整体执行SQL语句 DELIMITER //DROP PROCEDURE if EXISTS &lsquo;test&rsquo;; # 如果存在test存储过程则删除CREATE procedure test() # 创建无参存储过程,名称为testBEGIN DECLARE i I…

配置 Vite 的环境变量与模式 (.env mode)

目录 创建项目环境变量内建变量创建.env 文件定义变量HTML 环境变量替换 模式 创建项目 npm create vitelatest or yarn create vite or pnpm create vite 环境变量 Vite 在一个特殊的 import.meta.env 对象上暴露环境变量。 console.log(import.meta.env)内建变量 import.met…

关于chatGPT、AI绘画、AI提词器等AI工具国内如何使用

目前的AI潮流非常火热&#xff0c;OPENAI 出的CHATGPT可谓是目前大模型人工智能的代表&#xff0c;刚开始听说chatGPT可以写代码&#xff0c;写作&#xff0c;写方案&#xff0c;无所不能。还有AI绘画也很&#xff2e;&#xff22;作为一个程序员&#xff0c;为了体验这些&…

python+pytest接口自动化之参数关联

目录 一. 参数关联场景 二. 脚本编写 1. 在用例中按顺序调用 2. 使用Fixture函数 三. 总结 什么是参数关联&#xff1f; 参数关联&#xff0c;也叫接口关联&#xff0c;即接口之间存在参数的联系或依赖。在完成某一功能业务时&#xff0c;有时需要按顺序请求多个接口&…

听GPT 讲K8s源代码--pkg(三)

在 Kubernetes 项目中&#xff0c;pkg/controller目录下的子目录通常包含控制器相关的代码和逻辑。控制器是 Kubernetes 中用于管理资源的核心组件之一。它们负责监控资源的状态&#xff0c;并确保其符合所定义的期望状态。下面是对这些子目录的一些常见作用的解释&#xff1a;…

JavaScript中数据类型

对象和原始值 ● 在JavaScript中&#xff0c;有两种主要类型的数据&#xff0c;要不是原始值&#xff0c;要不是对象&#xff1b; 7种原始数据类型 1.数字 浮点数用于小数和整数。let age 23; 2.字符串 一系列字符的序列&#xff0c;用于文本。let firstName “IT知识…

全网最全整理,Allure集成Jenkins自动化测试实战(详细)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 Allure插件安装 …

libbpf-bootstrap 开发指南:概念与如何安装

目录 概念 如何安装& 使用 git 地址 使用git clone 下载代码 安装依赖环境 安装libbpf 编译example 概念 libbpf-bootstrap 是一个项目&#xff0c;旨在帮助开发者快速启动和开发使用 eBPF (Extended Berkeley Packet Filter) 和 libbpf 的程序。eBPF 是一种可以在…

2023.07.16 学习周报

文章目录 摘要文献阅读1.题目2.问题3.介绍4.Problem definition5.Method5.1 Feature Extractor5.2 Synthetic Node Generation5.3 Edge Generator5.4 GNN Classifier5.5 Optimization Objective5.6 算法 6.实验6.1 数据集6.2 基线6.3 实验结果 7.结论 数学建模1.欧式距离2.切比…

0130 物理层1

目录 2.物理层 2.1通信基础 2.1部分习题 2.物理层 2.1通信基础 2.1部分习题 1.下列说法正确的是&#xff08;&#xff09; A.信道与通信电路类似&#xff0c;一条可通信电路往往包含一个信道 B.调制是把模拟数据转换为数字信号的过程 C.信息传输速率是通信信道上每秒传…

SIP支持的传输协议

一、SIP支持的传输协议-UDP、TCP、TLS SIP是一个应用层的会话协议&#xff0c;与一般协议不同的是&#xff0c;SIP协议可以同时支持各种传输协议。 SIP支持UDP传输&#xff1a;UDP是一个无连接的协议&#xff0c;且不提供可靠性。在UDP上建立SIP连接存在不可靠性。 SIP…

【K210模块】使用UART模块发送和接收数据

官方案例链接 【K210模块】使用UART模块发送和接收数据 官方案例链接 一、代码部分1、添加转换句&#xff08;1&#xff09;字节data 转字符串① 添加了转换语句② 没有添加转换语句 &#xff08;2&#xff09;字符串str 转 字节data 2、三种方式的比较&#xff0c;K210发送到S…