我有一个 java 应用程序,它在某些部分使用 JNI 来完成一些工作。它遵循通常的 DLL 加载,然后调用 DLL 的本地方法。有什么方法可以限制 native 方法可以从 Java 应用程序做什么?例如,我们是否可以限制 DLL 不打开任何文件或不打开任何套接字,即使它有代码可以这样做?它可以禁止它加载的 DLL 来做某些事情,可能是通过登录某些东西或抛出异常。
最佳答案
不,你不能。 DLL 作为一个整体加载,然后 Java 端无法控制 native 代码正在做什么。
一种解决方案可能是中间人方法。这将涉及编写一个与原始 DLL 具有相同接口(interface)的“外壳”DLL。例如,您通过将“外壳”DLL 放在特定位置并使用 java.library.path
属性来告诉 Java 加载“外壳”DLL。然后“外壳”DLL 的作用是通过将其沙盒化并重定向标准函数来加载“真正的”DLL。这听起来很痛苦,而且这会发生在原生端,而不是 Java。
关于java - 限制来自 Java 的 native 代码功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2057164/