9

如何从适用于 Linux 的 Windows 子系统 (WSL) 中的 Linux 二进制文件调用 Windows API 函数?我很确定没有记录的方法可以这样做,但是尝试一下可能会很有趣。

我有兴趣调用 Win32 函数,或者如果这不可能,至少是 Windows NT 原生 API(Nt*、Zw*)。本机 API 至少应该是可用的,因为运行 Linux 进程 (lxss) 的组件依赖于这些 API。

可能需要构建一个自定义的类似 LoadLibrary 的函数来加载 Windows DLL。另一个想法是在进程内存中搜索已知的内核函数片段(即它们的用户模式入口点)。

有没有人尝试过这个并想分享一个解决方案?

4

1 回答 1

7

简而言之,你不能。

Linux 进程在其中运行的实际进程不是 Win32 进程,无法加载和执行 Win32 用户模式代码,也无法调用标准的 Win32 NT 内核入口点。

有关 WSL 使用的 PicoProcess 基础架构的更多信息,请阅读此博客和/或观看随附的视频

如果您确实想从 WSL 中运行的代码“调用”Windows 代码,您可能需要考虑使用某种形式的套接字/消息传递/RPC/REST 调用技术,其中关系的 etiher/两端都可以侦听和响应消息通过一些网络/套接字/管道进行。

于 2016-11-30T23:59:25.147 回答