如何从Wine进程调用Linux代码
摘要
本文介绍了如何从Wine进程调用Linux代码,涵盖了Windows和Linux代码在同一地址空间中共存的情况,并提供了未公开的集成机制。
<p><a href="https://lobste.rs/s/1evikl/how_call_linux_code_from_wine_process">评论</a></p>
查看缓存全文
缓存时间: 2026/07/05 00:47
# 如何从Wine进程调用Linux代码
来源:https://arcanenibble.com/how-to-call-linux-code-from-a-wine-process.html
## 但为什么呢?
长期以来有个梗说"Win32是稳定的Linux ABI"。大量为Windows设计的软件(包括/特别是老游戏)在通过 [Wine](https://www.winehq.org/)/[Proton](https://github.com/valvesoftware/proton) 运行时,在Linux上的表现同样好(甚至有时更好)。与此同时,为Linux稳健地打包面向用户的软件的各种方案仍然在不断变动,且有各种技术问题亟待解决。作为解决Linux软件分发问题的一个补充方案,假设你想为一个原本仅为Windows构建的程序增加对Linux的支持。事实证明,Wine提供了一些非常有用的机制来实现这一点,但它们的文档都极为匮乏。我在这里把所有相关且有用的信息集中到了一处。
## Wine 不是一个模拟器
在x86_64上通过Wine运行Windows程序时,Windows代码和Linux代码共存于同一个进程的同一地址空间中。你可以通过查看 Wine 进程的 `/proc/xxx/maps`([proc(5) 手册](https://man7.org/linux/man-pages/man5/proc_pid_maps.5.html))来看到这一点:
```
$ cat /proc/138689/maps
7ff60000-7ffd8000 ---p 00000000 00:00 0
7ffd8000-7ffe0000 rw-p 00000000 00:00 0
7ffe0000-7ffe1000 r--s 00000000 00:01 176 /memfd:wine-mapping (deleted)
7ffe1000-7ffe2000 rw-p 00000000 00:00 0
7ffe2000-7fff0000 ---p 00000000 00:00 0
140000000-140001000 r--p 00000000 08:03 2259098 /usr/lib/wine/x86_64-windows/notepad.exe
140001000-140008000 r-xp 00001000 08:03 2259098 /usr/lib/wine/x86_64-windows/notepad.exe
140008000-140009000 rw-p 00008000 08:03 2259098 /usr/lib/wine/x86_64-windows/notepad.exe
140009000-14000d000 r--p 00009000 08:03 2259098 /usr/lib/wine/x86_64-windows/notepad.exe
14000d000-14000f000 rw-p 00000000 00:00 0
14000f000-140045000 r--p 0000d000 08:03 2259098 /usr/lib/wine/x86_64-windows/notepad.exe
140045000-140071000 rw-p 00000000 00:00 0
140071000-140072000 r--p 00043000 08:03 2259098 /usr/lib/wine/x86_64-windows/notepad.exe
55555755c000-5555578b9000 rw-p 00000000 00:00 0 [heap]
6ffffadb0000-6ffffadb1000 r--p 00000000 08:03 2259267 /usr/lib/wine/x86_64-windows/uxtheme.dll
6ffffadb1000-6ffffadc6000 r-xp 00001000 08:03 2259267 /usr/lib/wine/x86_64-windows/uxtheme.dll
6ffffadc6000-6ffffadc7000 rw-p 00016000 08:03 2259267 /usr/lib/wine/x86_64-windows/uxtheme.dll
...(其余 /proc 映射行略,应保持原样)...
```
_注意:上述映射只是示例,实际输出会因 Wine 版本和运行的 Windows 程序而异。_
相似文章
将WINE移植到新爱好操作系统
详细记录了将Wine移植到Astral爱好操作系统的过程,通过WoW64实现了32位Windows应用的运行,并解决了OpenGL/EGL依赖问题,从而能够运行Cogmind等游戏。
适用于 Linux 的 Windows 9x 子系统
一个让经典 Windows 9x 环境在现代 Linux 子系统中运行的业余项目。
破解Windows:将RADV移植到Win32
Collabora 报告了将面向 AMD GPU 的开源 RADV Vulkan 驱动从 Linux 移植到 Windows 的过程,通过逆向工程 WDDM2 接口成功运行了 Counter-Strike 2。
Linux/x86-64上使用内存间接调用(徒劳?)的系统调用检测,第一部分
一篇技术博文,讨论在Linux/x86-64上检测系统调用的技术,包括指令双关、E9Patch、zpoline以及短指令修补的挑战。
Linux游戏性能提升,因为Windows API正成为Linux内核功能
随着Windows特定的同步API通过NTSYNC驱动直接实现在Linux内核中,Linux游戏性能得以提升。该驱动现已默认加载于Steam Deck上,有助于提高游戏兼容性和速度。