问题标签 [ntdll]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - 如何在 Visual Studio 2015 中解决 ntdll.dll!RtlpLogHeapFailure()?
我目前正在做一个人工智能项目。这是关于你需要将编号从 1 到 8 的棋子(空白区域标记为 0)移动到最后排序的谜题。但是,当我尝试调试它时遇到了一个奇怪的问题。
在指定的错误注释中,当我第二次调用 CreateNewState() 函数时,调试器停止并弹出:
AIProject_Puzzle.exe 已触发断点。
发生此错误时,我试图在调用堆栈中为你们带来一些额外的信息:
ntdll.dll!RtlReportCriticalFailure()
ntdll.dll!RtlpHeapHandleError()
ntdll.dll!RtlpLogHeapFailure()
ntdll.dll!RtlpAllocateHeap()
ntdll.dll!RtlAllocateHeap()
ucrtbased.dll!00007ff9b582c4da()
ucrtbased.dll!
00007ffrt9b582c2c .dll!00007ff9b582f34f()
ucrtbased.dll!00007ff9b582fdde()
AIProject_Puzzle.exe!CreateNewState(state * parent=0x000000c05c273520, action action=DOWN)
我知道这可能是堆损坏,所以我真正需要的是一个线索来解决这个问题。我正在使用 Visual Studio Community 2015,VisualC++。这个错误让我恶心。请问有人知道如何解决这个问题吗?
java - EXCEPTION_ACCESS_VIOLATION (0xc0000005)
尝试了来自堆栈溢出和其他社区论坛的不同线程的解决方案,但没有找到以下问题的解决方案。我安装了 JDK 1.7 - 64 位和 JDK 1.6 - 32 位。
java - 为什么 JVM 由于 NTDLL.DLL 在 Windows Server 2012 上随机崩溃?
我的生产服务器偶尔会导致 java.exe 服务崩溃,因此 myApplication Server Glassfish 4.1 也会崩溃。它是随机发生的,到目前为止我找不到解释这种行为的理由。
检查 Win Server 2012 事件查看器,说明应用程序错误是由于与 NTDLL.DLL 冲突。
在下面,我发布了在其中一次崩溃后收集的转储:
有谁知道如何解决它?
java - Java EXCEPTION_ACCESS_VIOLATION - 严格来说是 JVM 问题?我什么都没有?
这条消息并不像看起来那么长——我只在最后附上了一份冗长的日志报告
大家好,
我正在运行一个用 Java 实现的实验性爬虫。最近,经过 36 小时的运行,JVM 崩溃并发出异常访问冲突日志文件。我读了很多关于这个文件的内容,但对我来说仍然有点神秘。这是生成的日志文件中的相关“堆栈”版本:
正如您所看到的,至少从这个日志文件中可以看出,错误甚至不是从一些 java 代码开始的,而是从 ntdll 库开始的,其中指令执行在 jvm 本身遇到异常[编辑:或者可能反过来?以ntdll结束?]。我不想仅仅将其视为“嗯......我将重新安装 JVM 和 Windows,也许它会工作”(尽管我肯定会这样做),但试着看看是否有什么我可以做的它。一些已知的问题或可以应用的修复,除了我所说的显而易见的问题。问题是这个错误是在超过 36 小时后发生的,所以很难重现。
我还需要说我在调用
每隔大约 8 秒以确保清除内存。无论如何,如果这很重要。\
我没有使用任何图形库。
我没有使用任何 JNI 代码。
非常感谢您的阅读和可能的帮助,
阿米尔。
附加 - 几乎完整的日志文件 (hs_err_pid10544.log),没有非常冗长的线程详细信息:
c# - XmlDocument.load 错误导致退出应用程序时出现 ntdll.dll 错误
所以我对 xmldocument.load 函数MSND Link有疑问。具体来说,它在代码中运行良好,但在关闭程序时会导致 ntdll.dll 出现错误。
但是,如果我从我正在编写的程序中删除这个函数并单独运行它,它就可以正常工作。此外,如果我使用一些虚拟输入运行程序的其余部分,它也会运行并关闭而没有错误。
需要明确的是,这是作为 Windows 窗体应用程序运行的,这些函数是从我放在一起的谷歌 API 库中调用的。
我将如何解决此错误消息?
感觉它似乎不会导致程序出现问题我也接受一种在程序关闭后抑制错误消息弹出的方法。虽然很明显我宁愿解决这个问题而不仅仅是掩盖它。
编辑:2016 年 4 月 18 日我刚刚制作了该程序的第一个 Alpha 测试版本,当该程序在使用 WIX 创建安装程序并安装后从 Visual Studio 外部运行时,它不会引发错误。尽管很奇怪,但仍然在视觉工作室中发挥作用。
c - 从本机 ntdll 访问注册表项
是否有文档让我知道可以从 Native C++ 程序访问哪些 HKLM 注册表配置单元。我正在编写一个 C 程序,它将使用 BootExecute 运行并访问读/写 reg 条目。我可以在 \Registry\Machine\System\ControlSet001\Services 下成功完成,但是如果我尝试访问 \Registry\Machine\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\RunOnce 或 \Registry\Machine\Software\Microsoft\Windows \CurrentVersion\RunOnce
它失败。是否有文档或信息可以帮助我了解在操作系统启动期间可以访问的所有注册表,这会有所帮助。
c++ - 如何使用 Windows Native API 访问 PE 资源?
我有一个包含嵌入式资源的Windows 本机应用程序,我想使用本机 API访问它们。是否有处理资源的本机函数(类似于FindResource / LoadResource)或者我必须创建自己的 PE 阅读器来提取它们?
python - Python 程序因为 ntdll.dll 和 QtGui4.dll 而崩溃
我设计了一个 Python 软件来从我的微控制器收集数据并制作实时绘图:
我的 GUI 中有十二个 matplotlib 动画(GUI 是用 PyQt 设计的)。每个 matplotlib 动画都连接到一个 TCP 线程,通过该链接接收浮点数。收到浮点数后,matplotlib 动画会在图形中添加一个新点。欢呼,我们有现场图!
我的软件可以平稳运行几秒钟(有时长达半分钟)。然后灾难降临。Windows 提到“Python 已停止工作”。我什至没有在我的终端窗口中打印异常报告(因为它通常会发生在我的所有其他错误中)。Windows 询问我是否要调试 Python 应用程序,并建议为此使用 Visual Basic。在 Visual Basic 中,我收到以下错误报告:
我重新启动一切,然后再试一次。灾难再次袭来,我在 Visual Basic 中收到以下错误报告:
再一次,我重新开始另一个试验。灾难再次袭击我:
不幸的是,我不知道这些错误报告是什么意思。我已经用谷歌搜索了QtGui4.dll
了ntdll.dll
。我在我的计算机上找到了几个修复 dll 的程序,但 Norton 防病毒软件告诉我我不能信任它们。所以我现在别无选择,只能求助于 StackOverflow。
在此先感谢您的帮助。
编辑
:我已按照您的建议更改 matplotlib 后端matplotlib.use("Qt4Agg")
,但没有帮助。
redirect - 有没有办法让 Windows 7 x64 从本地目录加载 ntdll.dll,而不是 system32?
我正在开发一个应用程序,它保存自定义进程的状态,然后从停止的点恢复它。
现在有以下问题。当系统重新启动时,系统模块的所有基地址都是随机的(ntdll.dll
、kernelbase.dll
等kernel32.dll
)。操作系统是 Windows 7 x64 企业版。在重新启动后尝试恢复应用程序时,它显然会崩溃(但在重新启动前从恢复点开始工作正常)。我看到了两个解决方案:
- 在应用程序中加载系统模块时,使它们的地址保持静态
- 修补应用程序中对目标模块的所有引用(堆栈上的函数地址,可能保存在堆中的地址等)
显然,第二种方法是困难的。我们要进行完整的应用程序分析,将代码与数据不同,将数据与系统模块的引用不同,其中可能是简单的整数......所以我选择了第一种方式。
在虚拟内存中加载模块时,操作系统首先检查物理内存中是否已经存在具有此名称的模块。如果有,它只是将此模块映射到虚拟地址空间。在这种情况下,模块从其初始位置加载,如果是ntdll.dll
- from C:\Windows\System32\ntdll.dll
。即使您将此模块复制到应用程序目录,禁用 ASLR 标志并将图像库修补为某个值,该模块仍将从系统目录加载。需要某种重定向方式。
从MSDN我们了解到以下内容(“桌面应用程序的搜索顺序”部分):
桌面应用程序可以通过指定完整路径、使用DLL 重定向或使用清单来控制加载 DLL 的位置。如果没有使用这些方法,系统会在加载时搜索 DLL,如本节所述。
因此,至少有两种方法可以实现目标。
在关于 DLL 重定向的页面上,我们看到:
无法重定向已知的 DLL。有关已知 DLL 的列表,请参阅以下注册表项:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs。系统使用 Windows 文件保护来确保诸如此类的系统 DLL 不会被更新或删除,除非通过操作系统更新(例如服务包)。
我要重定向的模块是已知的 DLL,因此无法应用此变体。
留下清单。有一篇关于使用它们的优秀文章。文章的作者创建了存根 DLL 来替换原来的 ( user32.dll
),然后让应用程序加载这个替换的 DLL。关键是这个DLL是在搜索导入函数时加载的,而不是在应用程序一开始就加载,比如ntdll.dll
.
更具体地说,让我们参考“Windows Internals, Sixth Edition”, p. 359解释了进程创建的细节。那里有7个阶段:
- 转换和验证参数和标志
- 打开要执行的镜像
- 创建 Windows 执行进程对象
- 创建初始线程及其堆栈和上下文
- 执行 Windows 子系统特定的初始化后
- 开始执行初始线程
- 在新进程的上下文中执行进程初始化
这里最重要的几点:
映射
ntdll.dll
发生在第 3 阶段;在第 5 阶段开始时,我们阅读(重点是我的):
此时,Kernel32.dll 向 Windows 子系统发送一条消息,以便它可以设置 SxS 信息(有关并行程序集的更多信息,请参见本节末尾),例如 清单文件、DLL 重定向路径和新进程的进程外执行。
这意味着ntdll.dll
在重定向有机会发生之前加载。关于重定向的主题有很多关于 SO 的问题,但它们都是关于在搜索导入函数时加载的 DLL 或LoadLibrary
在应用程序中可能发生重定向时显式通过 加载的 DLL。
但是,ntdll.dll
无论如何在很早的阶段就被加载到应用程序中。
使用到目前为止我收集的所有信息,我能够进行应用程序搜索,例如,kernel32.dll
在应用程序的目录中(使用本段中的链接)。但我无法重定向搜索ntdll.dll
。
用户模式是否有可能?
PS 有一种全局禁用 ASLR 的方法,请参阅这篇文章。然而,这是一种非常粗鲁的方式,像Internet Explorer
,之类的应用程序Adobe Reader
无法运行,并且整个操作系统都存在漏洞。
c++ - 调用 NtQueryMutant 时的 STATUS_ACCESS_DENIED
免责声明:
问题和以下代码存在的唯一原因是我的应用程序中使用的外部组件,至少在不久的将来无法替换。该组件的逻辑拦截来自应用程序的 WinAPI 调用,并根据这些调用执行各种任务。
组件所做的其中一件事是,它为应用程序内初始化的每个线程创建互斥锁。但是,它不会关闭互斥锁,这会导致句柄泄漏。
因此,为了防止泄漏并且因为我无法访问组件的源代码,我必须发明丑陋的变通方法并使用深奥的 API。
免责声明结束
我正在尝试检查我的应用程序中互斥锁的状态。为了做到这一点而不改变我检查的每个对象的状态,我必须使用NtQueryMutant
来自ntdll.dll的方法。
我在这里收到的status
始终是-1073741790 (0xFFFF FFFF C000 0022),除了负数之外,它看起来与STATUS_ACCESS_DENIED完全相同。
这很奇怪,因为之前在代码中我同时使用了这两种方法NtQuerySystemInformation
并且NtQueryObject
没有任何问题。
其他详细信息:我的操作系统是 Windows 7 SP1,我尝试查询的互斥锁属于我正在执行查询的进程。