java和ntdll.dll之间的关系

时间:2018-06-13 17:48:14

标签: java windows java-native-interface ntdll

我有一个java应用程序(tomcat-app),后台使用JNI连接到C库。以一种非常随机的方式,这个java应用程序崩溃了。我在系统事件中看到,基于ntdll.dll崩溃,这是Windows / System32中的系统库。

有人可以告诉我,ntdll.dll提供了什么功能,它用于什么以及为什么java需要这个ntdll.dll?

我已经使用谷歌寻找解决方案,但这种崩溃几乎可以在所有Windows系统上发生,我将很多应用程序组合在一起(似乎它不仅仅是一个Windows-java问题)。标准解决方案是重新安装/更新系统和/或应用程序。但有没有解释,为什么这个ntdll.dll会这么麻烦?

你认为,如果我将更高版本的ntdll.dll放入java目录或c-library的目录中,那将有所帮助,以便java或c-lib可以采用这个更新的版本, Windows / System32版本?

非常感谢您的建议。 DD

2 个答案:

答案 0 :(得分:1)

ntdll是一个低级别的windows系统api,它提供了数百个windows api函数,如内存管理,加载DLL和系统异常。

您不能使用与系统上版本不同的版本,因为它与您正在运行的Windows操作系统版本紧密耦合/不可分割。

如果没有进一步的信息,很难说出问题可能是什么,但也许你在JNI包装器中使用了一个不正确的调用约定,导致堆栈不平衡。

答案 1 :(得分:0)

看来,JNI调用是正确的(我们使用了使用JNI的外部库)。此外,我们已经找到解决此问题的方法。 Windows的功能更新已引起ntdll.dll的版本。这样就解决了问题; java.exe崩溃再也不会出现。

相关问题