如何从Wine进程调用Linux代码

Lobsters Hottest 新闻

摘要

本文介绍了如何从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移植到新爱好操作系统

Lobsters Hottest

详细记录了将Wine移植到Astral爱好操作系统的过程,通过WoW64实现了32位Windows应用的运行,并解决了OpenGL/EGL依赖问题,从而能够运行Cogmind等游戏。

破解Windows:将RADV移植到Win32

Hacker News Top

Collabora 报告了将面向 AMD GPU 的开源 RADV Vulkan 驱动从 Linux 移植到 Windows 的过程,通过逆向工程 WDDM2 接口成功运行了 Counter-Strike 2。