问题标签 [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++ - 由于 ntdll.dll 导致程序崩溃
我创建了一个程序(vs2010,c++,win7),它是一个多线程并且有模块。与某些硬件通信的程序。我在一台只有win7和硬件驱动程序的干净计算机上运行这个程序。使用我的程序一段时间后,其中一个模块崩溃了。我尝试在开发计算机中调试程序,调用堆栈显示我只调用“ntdll.dll”,我还尝试从测试计算机中的程序创建转储文件,我得到了相同的结果。通常,当所有模块上都有大量负载时,模块会崩溃。我不知道从哪里开始调试这个程序,所以我对想法持开放态度。
编辑: 我也收到异常“0xc0000374 堆已损坏”
tnx。
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”列为原因后,我搜索了涉及该问题的问题,但没有找到任何解决方案。
你有什么想法我可以做些什么来解决这个问题吗?
c# - Windows 8.1 中的应用程序崩溃
我在 [.net 3.5] 中的一个 windows 应用程序安装在windows 8.1中,用于上传图像。
我打开应用程序,并使用 dll 浏览本地磁盘中存在的图像以选择并上传它们。
浏览完图像选择后,如果我在系统中创建“新文件夹”,应用程序崩溃 -它给了我异常:
一个问题导致程序停止正常工作。windows将关闭程序并通知...
我交叉检查了事件日志,这是为相同添加的相应日志:
请问这可能是什么原因?
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)。
这真的很烦人 - 我在调试时得到这个断点随机阻止我。
谢谢!
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吗?感谢您的帮助
c++ - 使用 finContours 函数和下载 ntdll 文件时出错
我是使用 VS2012 和 openCV 完成我的 FYP 的新手,我必须使用 Contours 检测人体(对象检测)。我已经成功安装了(VS2012 和 openCV),并且一直在做一些基本的图像处理,除了逻辑或句法之外没有任何未知问题,直到我遇到使用我现在被拘留的 findContours 函数。我的问题是:
当我不使用与 Contour 相关的东西时,即 findContours , drawContours,通过评论它,一切都很好,我可以使用 trackbar 来扩大/侵蚀图像,但是一旦我使用 Contour 相关的东西并按“F5”,图像显示检测到的对象周围的轮廓与断点一起显示 Program.exe 已触发断点,因此我无法进一步使用它。
为方便起见,以下是堆栈跟踪中的列表:
注意 1:我已按照pbrandoli给出的说明进行操作 ,但在通过 Microsoft 符号服务器加载未突出显示的“ntdll.dll 和 msvcr”后,在重新启动 (Cntrl+Shift+F5) 或调试(F5) 时会突出显示并再次获得未突出显示表示它丢失。
注2:为方便起见,我已经简明了列表。
以下是我在图像中用于轮廓检测的代码:
}
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-linux和https://reverseengineering.stackexchange.com/questions/1786/usb-dongle - 交通监控。看起来这些工具与 Windows 8.1 x64 不兼容。
windows - 为什么在 Win7 64bit 中不能通过 'ntQuerySystemInformation' 获取超过 65535 的进程 ID?
我使用“ntQuerySystemInformation”来获取所有句柄信息,例如:
pHandleInfor 的结构是:
它在xp 32bit下运行良好,但是在Win7 64bit下只能得到小于65535的正确pid。这个结构中processId的类型是ULONG,我认为它可以得到大于65535的。它有什么问题?有没有其他 API 代替?
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 进程,最后得到了实际的异常:
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。输出更改为不可打印的字符。
不时深入挖掘并查看评论。也许这段代码对这里的其他人有用。