问题标签 [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.

0 投票
0 回答
1372 浏览

c++ - 由于 ntdll.dll 导致程序崩溃

我创建了一个程序(vs2010,c++,win7),它是一个多线程并且有模块。与某些硬件通信的程序。我在一台只有win7和硬件驱动程序的干净计算机上运行这个程序。使用我的程序一段时间后,其中一个模块崩溃了。我尝试在开发计算机中调试程序,调用堆栈显示我只调用“ntdll.dll”,我还尝试从测试计算机中的程序创建转储文件,我得到了相同的结果。通常,当所有模块上都有大量负载时,模块会崩溃。我不知道从哪里开始调试这个程序,所以我对想法持开放态度。

编辑: 我也收到异常“0xc0000374 堆已损坏”

tnx。

0 投票
0 回答
2265 浏览

java - Java 随机崩溃(可能的罪魁祸首:ntdll.dll?)

我有一个用 Java 编写的程序,并使用 Windows 任务计划程序设置为每 5 分钟运行一次。它执行“C:\Program Files\Java\jre7\bin\javaw.exe”并传递 jar 文件和所有命令行参数。

在大多数情况下,这运行得非常好,但时不时地,我会回到我的计算机并看到一个弹出窗口,说“Java(TM) Platform SE 二进制文件已停止工作”。因此,起初,我认为这与我的代码有关,并添加了许多附加到文本文件的调试语句。当它崩溃时,我检查了文本文件,其中没有列出不完整的运行。然后我在我的主要方法中添加了一个打印语句:

然后我不断地从命令行运行 Java 程序,直到它崩溃,我发现了一些有趣的东西。在崩溃时,它从未打印过“Main Method Called”。现在,我发现这很有趣,因为这告诉我崩溃的不是我的 Java 程序,而是 Java 本身。

然后我继续往我的命令行添加了详细的打印语句:

从那里,我继续这个过程,直到程序再次失败。当它失败时,输出(346 行)将比成功运行(667 行)小得多。直到第 346 行输出突然停止时,两次运行中的所有内容都完全相同。所以,这让我觉得第 346 行或第 347 行发生的任何事情都会导致它崩溃。这是第 340-346 行:

在成功运行中,输出继续,这里是第 347-355 行:

最后,当它崩溃时,Windows 会弹出一个弹出窗口(我之前提到过),其中包含以下信息:

在阅读问题签名并看到“ntdll.dll”列为原因后,我搜索了涉及该问题的问题,但没有找到任何解决方案。

你有什么想法我可以做些什么来解决这个问题吗?

0 投票
1 回答
1721 浏览

c# - Windows 8.1 中的应用程序崩溃

我在 [.net 3.5] 中的一个 windows 应用程序安装在windows 8.1中,用于上传图像。

我打开应用程序,并使用 dll 浏览本地磁盘中存在的图像以选择并上传它们。

浏览完图像选择后,如果我在系统中创建“新文件夹”,应用程序崩溃 -它给了我异常:

一个问题导致程序停止正常工作。windows将关闭程序并通知...

我交叉检查了事件日志,这是为相同添加的相应日志:

请问这可能是什么原因?

0 投票
1 回答
617 浏览

c++ - ntdll.dll 中不需要的断点!_LdrpSnapThunk@36() + 0xf5 字节

我正在以下环境中调试 Outlook 加载项 DLL:Windows 7 x64 Office 2013 Click-to-Run x86 Visual Studio 2010 Native only (C++)

“显示加载程序快照”在系统级别和 x86 和 x64 注册表中的 Outlook.exe 都被禁用,并且我已经验证在任何地方都没有覆盖“GlobalFlag”注册表值。

系统中唯一的“GlobalFlag”值设置为 0x00000400(仅 FLG_POOL_ENABLE_TAGGING)并且在 CurrentControlSet 中。

当我将 VS 调试器附加到 OUTLOOK.EXE(我的 DLL 已加载)时,我可以按预期调试它(符号加载等),但在随机时间我会遇到这个断点,不管我在做什么。

为什么我会在 LdrpSnapThunk 中获得断点?我什至找不到任何选项来设置/启用此类断点(加载程序快照应该只打印调试字符串,而不是导致断点,AFAIK)。

这真的很烦人 - 我在调试时得到这个断点随机阻止我。

谢谢!

0 投票
1 回答
1579 浏览

c - 获取内核对象窗口列表

  • 你好!

我打赌一个多星期,我无法完整地了解如何获取内核对象列表。我的算法如下:

  • 1) 连接 NTDLL.dll (LoadLibrary)
  • 2) GetProcAddress (variable_Library_name, "NtQueryDirectoryObject") 和预告结构:_OBJDIR_INFORMATION, _OBJECT_ATTRIBUTES
  • 3) 尝试为对象列表应用函数 NtOpenDirectoryObject

下面是一段代码,它负责函数 NtOpenDirectoryObject 的使用:

完整代码(包括结构定义)位于: http: //pastebin.com/pDNb3GTn

当调用带有参数 NtOpenDirectoryObject 的函数时,会得到一个异常 c0000005,这意味着访问被阻止。

请告诉我,我做错了什么,我的错误在哪里。可以不使用本机api吗?感谢您的帮助

0 投票
1 回答
139 浏览

c++ - 使用 finContours 函数和下载 ntdll 文件时出错

我是使用 VS2012 和 openCV 完成我的 FYP 的新手,我必须使用 Contours 检测人体(对象检测)。我已经成功安装了(VS2012 和 openCV),并且一直在做一些基本的图像处理,除了逻辑或句法之外没有任何未知问题,直到我遇到使用我现在被拘留的 findContours 函数。我的问题是:

当我不使用与 Contour 相关的东西时,即 findContours , drawContours,通过评论它,一切都很好,我可以使用 trackbar 来扩大/侵蚀图像,但是一旦我使用 Contour 相关的东西并按“F5”,图像显示检测到的对象周围的轮廓与断点一起显示 Program.exe 已触发断点,因此我无法进一步使用它。

为方便起见,以下是堆栈跟踪中的列表:

注意 1:我已按照给出的说明进行操作 ,但在通过 Microsoft 符号服务器加载未突出显示的“ntdll.dll 和 msvcr”后,在重新启动 (Cntrl+Shift+F5) 或调试(F5) 时会突出显示并再次获得未突出显示表示它丢失。

注2:为方便起见,我已经简明了列表。

以下是我在图像中用于轮廓检测的代码:

}

0 投票
1 回答
326 浏览

winapi - 调试 USB 读取

我正在调试一些使用第 3 方 64 位 DLL 访问自定义 USB 设备的代码。我的环境是 Windows 8.1 x64 上的 Microsoft Visual Studio 2012。

根据不完整且不可靠的文档,DLL 应该发出 USBDEVFS_CONTROL ioctl 以从连接的 USB 设备读取 1 个字节。该定义涉及

这里bmRequestType, bRequest, wValue, 和wIndex是设备制造商提供的常量,是包含特定命令ByteArray的缓冲区。uint8_t[64]

DLL 接受特定于应用程序的参数,将它们打包到ByteArray, 并调用ksproxy.ax-> Kernelbase.dll-> ntdll.dll。我在用户模式下看到的最后一个反汇编是

根据文档,使用分步调试器,我可以很容易地看到它的ByteArray构造完全符合预期。但我找不到该usbdevfs_ctrltransfer结构或其 Windows 等效项。

具体来说,我们怀疑wIndex文档中指定的 的值适用于旧版本的硬件,并且 Windows DLL 实际上使用0x0400而不是0x0402.

任何提示(包括硬件或软件 USB 嗅探器、仿真器等)我们如何尝试验证此无符号短路将不胜感激。

更新

阅读https://reverseengineering.stackexchange.com/questions/2416/how-to-reverse-engineer-simple-usb-device-windows-linuxhttps://reverseengineering.stackexchange.com/questions/1786/usb-dongle - 交通监控。看起来这些工具与 Windows 8.1 x64 不兼容。

0 投票
2 回答
1020 浏览

windows - 为什么在 Win7 64bit 中不能通过 'ntQuerySystemInformation' 获取超过 65535 的进程 ID?

我使用“ntQuerySystemInformation”来获取所有句柄信息,例如:

pHandleInfor 的结构是:

它在xp 32bit下运行良好,但是在Win7 64bit下只能得到小于65535的正确pid。这个结构中processId的类型是ULONG,我认为它可以得到大于65535的。它有什么问题?有没有其他 API 代替?

0 投票
0 回答
806 浏览

c# - vshost.exe BEX64 在窗口关闭时崩溃

我正在运行带有最新更新的 Visual Studio 2012 和带有最新更新的 Win7 上的最新 ReSharper。我有一个使用 Entity Framework 6.1 的 .NET 4.5 x64 C# Topshelf 3.1.122 包装项目。无论调试器是否附加,当我通过关闭窗口退出正在运行的程序时,vshost.exe 将停止工作,我将不得不强制退出它。这似乎没有明显的效果;这很烦人。该行为仅发生在我的机器上,而不是其他开发人员的机器上。如果使用红色停止按钮停止调试会话,则不会发生崩溃。知道什么会导致这种情况吗?

问题签名:问题事件名称:BEX64 应用程序名称:REDACTED.vshost.exe 应用程序版本:11.0.50727.1
应用程序时间戳:5011d445 故障模块名称:ntdll.dll 故障模块版本:6.1.7601.18247 故障模块时间戳:521eaf24
异常偏移量:0000000000072c4a 异常Code: c000000d
Exception Data: 0000000000000000 OS Version: 6.1.7601.2.1.0.256.1
Locale ID: 1033 Additional Information 1: 402a Additional Information 2: 402ac0175590edba59c75743ddb69b2f Additional Information 3: e38f Additional Information 4: e38f53f34d74d36ff87488c7f8d2b32e

这是 Topshelf 包装器代码供参考:

如果我在 Main 的末尾或 svc.Stop 方法的开头放了一个断点,当我关闭窗口时调试器不会中断,vshost.exe 会立即崩溃。无论如何,我看不出我如何才能完成这个。

更新:我使用 WinDbg 附加到 vshost 进程,最后得到了实际的异常:

0 投票
1 回答
444 浏览

c++ - GetFinalPathByHandle 为 NtQuerySystemInformation 返回的所有句柄返回相同的路径

我想检索操作系统中进程访问的所有文件路径。检索进程列表并且这些进程具有正确的句柄值。所以现在我想使用GetFinalPathNameByHandle函数来获取这些文件的路径,但是所有记录的路径变量都是相同的。伙计们,我需要帮助。

源代码在这里:http://pastebin.com/nU26Vcsd或者如果 pastebin 无法访问这里http://hastebin.com/wahudogawa.avrasm

第 66 行是我需要帮助的地方。测试进程的每个文件处理程序的路径都相同,并且等于执行该程序的路径(而不是进程启动文件夹)。

我将其运行为:testprogram.exe | grep 5231其中 5231 是我需要的进程的 PID。

结果如下所示:

虽然那些应该像:

或者,如果我的预期结果有误,请纠正我。


最新补充:

感谢@Raymond Chen 的评论,我正在努力前进并使用 DuplicateHandle() 功能。到目前为止,我已经更新了代码(现在是硬编码的 pid,抱歉),添加了 HandleValueTemp,试图将它传递给 DuplicateHandle。输出更改为不可打印的字符。

不时深入挖掘并查看评论。也许这段代码对这里的其他人有用。