Wine源码中添加新的DLL模块

Wine源码中添加新的DLL模块

1. 基础环境准备

编译环境:debootstrap 安装 debian bullseye
源码版本:Wine 9.0-rc4
基础环境搭建

2. 创建DLL模块目录

在dlls目录下新建一个文件夹:nfs
将amsi目录下的三个文件全部复制到nfs目录下:

main.c 文件内容中新加一个函数如下:

BOOLEAN WINAPI Test_In_CreateWindowEx( const WCHAR *classname, ULONG*  style, ULONG*  dwExStyle )
{TRACE( "classname=%s, style=0x08x, style=0x08x \n", debugstr_w(classname), style,  dwExStyle);return TRUE;
}

spec文件改名为nfs.spec, 将上面实现的函数导出给外部调用,nfs.spec内容如下:

@ stdcall Test_In_CreateWindowEx(ptr ptr ptr)

Makefile.in文件内容如下:(IMPORTLIB是为了生成.a文件)

MODULE    = nfs.dll
UNIXLIB   = nfs.so
IMPORTLIB = nfsSOURCES = \main.c

3. 修改配置文件

将源码根目录下的 configure和configure.ac两个文件的权限改为可以编辑。

chmod 777 ./configure
chmod 777 ./configure.ac

打开configure.ac 文件找到dlls/amsi配置所在的行,按其样式,在他下方添加新的模块名

...
WINE_CONFIG_MAKEFILE(dlls/amsi)
WINE_CONFIG_MAKEFILE(dlls/nfs)
...

修改完成后,执行autoconf命令,重新生成configure文件,文件中会包含如下内容:

...
wine_fn_config_makefile dlls/nfs enable_nfs
...

4. 验证配置文件

执行./configure

...
configure: Finished.  Do 'make' to compile Wine.

运行成功后,在dlls/nfs目录下可以看到,一个名为Makefile的文件生成出来, 文件内容如下:

all:
all install install-lib clean i386-windows/main.o i386-windows/nfs.dll:@cd ../.. && $(MAKE) dlls/nfs/$@
.PHONY: all install install-lib clean

5. 其它模块调用

如果要在user32模块中调用新加的DLL中的函数,编辑dlls/user32/Makefile.in文件,将nfs加到IMPORTS后。

IMPORTS   = $(PNG_PE_LIBS) gdi32 sechost advapi32 kernelbase win32u nfs

dlls/user32/win.c文件中, 声明一下Test_In_CreateWindowEx方法,然后在WIN_CreateWindowEx方法内就可以直接调用了。

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

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

相关文章

3-微信小程序组件基本用法

小程序组件是由宿主环境提供的,开发者可以基于组件快速搭建出页面结构。官方把小程序组件分为9类。 视图容器基础内容表单组件导航组件媒体组件map地图组件canvas画布组件开放能力无障碍访问 常用视图组件 view 官网传送门 普通视图区域 类似于HTML中div&#x…

Python基础语法(中)—— python列表、字符串、函数

文章目录 5. python中的列表5.1 列表的初始化5.1.1 直接初始化5.1.2 通过append函数初始化5.1.3 通过for语句初始化列表长度和每个位置的数值 5.2访问列表元素5.3使用循环语句遍历列表5.4列表的切片操作5.5列表的复制5.6列表的运算5.7列表的常用操作5.8嵌套列表5.9列表其他小知…

【计算机二级考试C语言】C基本语法

C 基本语法 我们已经看过 C 程序的基本结构,这将有助于我们理解 C 语言的其他基本的构建块。 C 的令牌(Token) C 程序由各种令牌组成,令牌可以是关键字、标识符、常量、字符串值,或者是一个符号。例如,下…

基于springboot+vue的网上花卉商城系统(Java毕业设计)

大家好,我是DeBug,很高兴你能来阅读!作为一名热爱编程的程序员,我希望通过这些教学笔记与大家分享我的编程经验和知识。在这里,我将会结合实际项目经验,分享编程技巧、最佳实践以及解决问题的方法。无论你是…

Pandas实战100例 | 案例 6: 数据排序 - 对 DataFrame 进行排序

案例 6: 数据排序 - 对 DataFrame 进行排序 知识点讲解 数据排序是数据分析中的一个重要环节,可以帮助我们更好地理解数据的分布和趋势。Pandas 提供了灵活的排序功能,包括按照一列或多列进行升序或降序排序。 示例代码 按单列升序排序 # 按单列升序…

「 网络安全术语解读 」点击劫持Clickjacking详解

引言:要想深入理解点击劫持攻击,我们需要先清楚iframe的用途及优缺点。 1. 关于iframe iframe是HTML语言中的一部分,通常用于在网页中嵌入其他网页的内容,如图像、视频、音频、链接等。它允许在一个网页中插入另一个网页&#xf…

高性能mysql 第三版 读书笔记

MySQL中的tmp_table_size和max_heap_table_size|极客笔记 mysql占用内存过高调优方法_tmp_table_size过大阻塞-CSDN博客 查看mysql分配的内存 mysql查看内存利用状态_mob6454cc6d81c9的技术博客_51CTO博客 https://www.cnblogs.com/stronger-xsw/p/13632505.html

国企石油化工单位任职资格体系搭建案例

传统的任职资格体系主要考虑年限、经验、资历等因素,部分企业在任职资格体系中也引入了能力指标,但是,实际管理过程中仍然存在很多问题:员工“熬年头”意识严重、工作积极性差、优秀人员因得不到晋升而流失、各方面能力都不错的人…

three.js讲解

文章目录 一、概念二、案例三、常见问题四、优缺点五、相关链接 一、概念 three.js是一个基于WebGL的JavaScript库,用于创建和展示三维图形。它提供了一套简单而强大的工具,可以在浏览器中实现高性能的3D渲染。 three.js的主要概念包括以下几个方面&am…

【一文详解】知识分享:(C#开发学习快速入门)

面向对象(OOP) c语言是面向过程。 c是面向过程面向对象。 c#是纯粹的面向对象: 核心思想是以人的思维习惯来分析和解决问题。万物皆对象。 面向对象开发步骤: 分析对象 特征行为关系(对象关系/类关系) 写代码: 特征–>成员变量 方法–>成员方法 实例化–具体对象 …

系统学习Python——警告信息的控制模块warnings:暂时禁止警告

分类目录:《系统学习Python》总目录 如果明知正在使用会引起警告的代码,比如某个废弃函数,但不想看到警告(即便警告已经通过命令行作了显式配置),那么可以使用catch_warnings上下文管理器来抑制警告&#x…

Python商业数据挖掘实战——爬取网页并将其转为Markdown

前言 「作者主页」:雪碧有白泡泡 「个人网站」:雪碧的个人网站 ChatGPT体验地址 文章目录 前言前言正则表达式进行转换送书活动 前言 在信息爆炸的时代,互联网上的海量文字信息如同无尽的沙滩。然而,其中真正有价值的信息往往埋…

【设计模式】单例模式、工厂方法模式、抽象工厂模式

1. 单例模式 (Singleton Pattern): 场景: 在一个应用程序中,需要一个全局唯一的配置管理器,确保配置信息只有一个实例。 public class ConfigManager {private static ConfigManager instance;private ConfigManager() {// 私有构造函数&am…

ORA-12541:TNS:无监听程序

1.重新配置监听 找到监听程序配置,右键已管理员身份运行 选择第二个:重新配置 这个一般没什么好选的 默认选定的协议TCP,继续下一步 默认的否 继续下一步,完成监听重新配置 之后进行测试看能否连上 2.本地Net服务名配置 …

Arrow:在项目中进行时间处理的强大工具

目录 一、Arrow简介 二、安装与配置 三、基础功能与使用 1. 日期和时间格式转换 2. 时区处理 3. 时间序列分析 四、进阶应用与案例分析 五、性能与优化 六、最佳实践与经验分享 七、总结与展望 在处理日期和时间时,我们经常需要一个精确、可靠的库来帮助我…

NIO核心依赖多路复用小记

NIO允许一个线程同时处理多个连接,而不会因为一个连接的阻塞而导致其他连接被阻塞。核心是依赖操作系统的多路复用机制。 操作系统的多路复用机制 多路复用是一种操作系统的 I/O 处理机制,允许单个进程(或线程)同时监视多个输入…

第二百六十一回

文章目录 1. 概念介绍2. 使用方法2.1 简单用法2.2 自定义用法 3. 示例代码4. 内容总结 我们在上一章回中介绍了"三方包open_settings"相关的内容,本章回中将介绍另外一个三方包:bluetooth_enable_fork.闲话休提,让我们一起Talk Flu…

【漏洞复现】锐捷EG易网关cli.php后台命令执行漏洞

Nx01 产品简介 锐捷EG易网关是一款综合网关,由锐捷网络完全自主研发。它集成了先进的软硬件体系架构,配备了DPI深入分析引擎、行为分析/管理引擎,可以在保证网络出口高效转发的条件下,提供专业的流控功能、出色的URL过滤以及本地化…

MySQL批量插入技巧

关于MySQL批量插入的一些问题 MySQL一直是我们互联网行业比较常用的数据,当我们使用半ORM框架进行MySQL大批量插入操作时,你是否考虑过这些问题: 进行大数据量插入时,是否需要进行分批次插入,一次插入多少合适?有什么…