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 = nfs

SOURCES = \
	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方法内就可以直接调用了。

相关推荐

  1. Wine添加DLL模块

    2024-01-12 20:16:04       61 阅读
  2. c#有dll,整合到自己exe

    2024-01-12 20:16:04       38 阅读
  3. caffe | caffe添加upsample层

    2024-01-12 20:16:04       36 阅读
  4. SQLDMLDDL以及DCL是什么?

    2024-01-12 20:16:04       56 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-12 20:16:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-12 20:16:04       100 阅读
  3. 在Django里面运行非项目文件

    2024-01-12 20:16:04       82 阅读
  4. Python语言-面向对象

    2024-01-12 20:16:04       91 阅读

热门阅读

  1. SpringBoot 配置文件

    2024-01-12 20:16:04       43 阅读
  2. Springboot 中接口服务重试机制

    2024-01-12 20:16:04       42 阅读
  3. 博客随手记

    2024-01-12 20:16:04       54 阅读
  4. List、Set、Map有什么区别?

    2024-01-12 20:16:04       44 阅读
  5. 【CS4495】Computer Vision

    2024-01-12 20:16:04       44 阅读
  6. ORACLE之rman备份恢复及故障处理

    2024-01-12 20:16:04       47 阅读
  7. 总结多线程的各种锁

    2024-01-12 20:16:04       57 阅读
  8. TCP 传输的三次握手、四次挥手策略

    2024-01-12 20:16:04       57 阅读
  9. 力扣labuladong——一刷day90

    2024-01-12 20:16:04       54 阅读