问题标签 [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 - 为什么我的自定义分析代码总是告诉我电脑在 KeFastSystemCallRet()?
我正在尝试在我的框架中分析滞后;因为我使用 MinGW,gprof 不适用于 DLL(对我来说,它甚至给了我垃圾信息,比如运行数千次而不是一次的初始化函数),并且 Windows 不支持 gperftools 的分析器(还),我试过了滚动受 Cygwin 启发的我自己的分析代码:
但是,此返回的配置文件是无用的:
此特定值在 wine 上,它重定向到__kernel_vsyscall+0x3
. 真正的 Windows 有类似的东西7C90E514
,它重定向到ntdll!KeFastSystemCallRet
.
我猜(给定葡萄酒堆栈跟踪)这是因为它卡在GetMessage()
.
如果我将睡眠持续时间从 100 更改为 1,我偶尔会得到更有意义的值。
有什么我想念的吗?有没有更好的分析选项,或者我在某种程度上有这个根本错误?
谢谢。
c# - 在多线程 Win 表单应用程序中崩溃 ntdll.dll
使用VS2013 64bit、.Net FW 4.5.0、EMGU.CV、NReco.VideoConverter
解决方案中有几个项目。解决方案的工作流程是:
- 输入视频文件(任何格式)
- 将文件拆分为多个文件(持续 5 分钟)
- 使用TPL一次转换 2 个视频文件
- 并开始并行视频处理
- 并行处理两个文件(每个 5 分钟)后,我必须关闭两个处理窗口(实际上是 winForm 项目)
- 然后开始接下来的两个拆分文件的转换
- 转换成功后,第 4 步再次开始,将一直运行,直到处理完所有拆分文件。
这是问题所在: 成功进入第 7 步并在成功转换第二个两个文件后停止工作。实际上,虽然它试图重新启动视频处理。错误是VSHOST32.exe has stopped working
。在事件日志中结束我得到了这个:
出什么问题了ntdll.dll?
c - 读取 ntdll.dll + offset 会导致访问冲突
我正在尝试逐字节读取其内存ntdll.dll
加载到我的可执行文件中。该可执行文件在我的 x64 windows 7 机器上编译为 x32 可执行文件。
我编写了一个名为的函数FindPattern
,它接收一个特定的字节数组,并在 ntdll.dll 模块中查找这个字节数组。
我已经在其他模块上检查了这个功能,我确信它工作正常。
现在当我在我的 ntdll 模块上使用这个函数时,它在读取内存 ntdll + 0x1000 时崩溃。
我在windbg上检查了这个,windbg也无法读取内存:
我不知道为什么会发生这种情况,但它包含 0x9000 字节
它没有发生在我检查的任何其他 DLL 中。这个问题可以被绕过,ReadProcessMemory
但我想了解是什么原因造成的。
运行 !dh 命令结果:
为什么会这样10000 section alignment
,10000 base of code
这两者似乎都包含我需要避免崩溃和访问冲突的正确值。
是什么原因造成的,为什么它只发生在 ntdll 中?
c - GetProcAddress(GetModuleHandle("user32.dll"), "DefWindowProcW") 返回 ntdll 中的地址
我正在使用 Windows 7 Professional x64。
我需要挂钩 DefWindowProcW 程序。但是当我尝试通过 获取它的地址时GetProcAddress()
,它返回NtdllDefWindowProcW()
位于 ntdll.dll 中的地址。开头有一个真正的user32
函数跳转。DefWindowProcW()
NtdllDefWindowProcW()
有没有办法获得真正的程序地址而不是 ntdll 程序?
windows - MFC 应用程序在 NTDLL.dll 中崩溃
我有一个基于 MFC 的应用程序。它会在几秒钟后继续寻找文件(使用基于 CreateTimerQueueTimer 的计时器)并执行一些操作。这总是在 XP 上崩溃(原因不明)。此应用程序在 Windows 7 和 Windows 8 上运行良好。但 XP 上的问题仍然存在。
下面是没有显示任何帮助的调用堆栈
拆解截图如下:
编辑1:
我改变了一些设置,我得到了这个新的调用堆栈。但仍然没有得到线索。:
我不明白如何找出崩溃的原因。是否有任何提示或任何方法可以跟踪从拆卸中播下的内容?还是系统的 NTDLL.DLL 文件有问题?欢迎任何帮助。
c++ - MFC 应用程序在 Visual Studio 中工作,但双击启动时崩溃
我有一个 GUI 应用程序MFC
。出于某种原因,它在 Visual Studio 发布和调试模式下工作得非常好,但如果.exe
双击启动它会崩溃。
我不明白这个错误可能在哪里,因为它在 Visual Studio 中托管时工作得很好。无奈之下,我禁用了所有优化例程,但似乎没有帮助。
OS
是Win 7
,IDE
是VS 2010
。
故障模块是ntdll.dll
,但我怀疑这是真正的问题......
编辑 -
将调试器附加到崩溃显示一个问题LoadFrame()
这调用:
这是它在 Visual Studio 之外失败的地方。
给出的例外是:The activation context being deactivated is not the most recently activated one
。
我四处搜索并尝试了以下操作,即,将所有设置Exceptions
为 throw 以捕获任何已处理的异常,并将其设置afxAmbientActCtx
为FALSE
,但没有运气让它运行。这exe
以前运行得很好。
好心提醒。
c++ - LibVLC 访问冲突
我正在尝试在 LibVLC 中设置日志记录,但遇到了一些问题。
我使用的函数是 libvlc_log_set_file,这里是文档: LibVLC logging docs
这是我现在拥有的代码:
在线libvlc_log_set_file
我收到此错误,“nw.exe 中 0x77559E33 (ntdll.dll) 处的未处理异常:0xC0000005:访问冲突写入位置 0x00000014。”
我可以fputs()
很好地打开和写入文件。
我正在使用 NW.js 和 WebChimera.js 在 64 位 Windows 7 机器上使用 Visual Studio 2013 编译为 32 位。
有任何想法吗?
c# - 此堆栈跟踪是否以 _NtWaitForSingleObject@12() 结尾,表示线程阻塞或空闲?
我有一个大量使用任务并行库的应用程序。当我的应用程序运行时,我注意到 ProcessExplorer 报告的应用程序使用的线程数有时会超过 200 个线程,最终应用程序会在线程用完时锁定。
当我使用 AdPlus 对内存进行 FULL DUMP 并在 Visual Studio 中打开它时,我看到当时有 82 个线程在运行(尽管当时 ProcessExplorer 报告超过 100 个)。
其中许多线程(其中 42 个)仅显示以下堆栈跟踪:
我的问题是:
具有上述堆栈跟踪的线程是否正在等待我启动并随后成为孤立的东西?还是该堆栈跟踪仅指示空闲线程?
windows - dll 是否总是以相同的方式加载到进程中?
我正在尝试构建一个迷你分析器。它记录给定测试集的函数调用,并且应该稍后告诉给定模块中的哪些函数已运行。
我记录了一堆虚拟地址,我可以廉价地转换成成对的[模块名称,地址偏移]。
在每个进程中加载 PDB 并查询它的符号名称是一项非常昂贵的操作。
我正在考虑保存 [模块名称,地址偏移] 列表,然后将 PDB 加载到后处理程序中并将这些映射到符号一次。
现在我不确定模块/dll 是否总是以相同的方式加载,即符号与模块库的虚拟地址偏移量是否总是相同的?
如果模块(相同的二进制 dll)在不同的 Windows 版本(例如 Win7 与 WinServer2008)上加载,是否也一样?
c - 在 Windows 下具有直接系统调用的 Hello World。没有ntdll.dll,kernel32.dll,...有什么解决办法吗?
为了使问题更清楚,我将发布一个 Linux 32 位的简短示例。
可以像这样为 Linux 32 位 x86 编译此代码:
现在我想对 Windows 做同样的事情(只是为了好玩和了解一些内部结构)。目前我使用Win2K SP4(在 VM 内)进行测试。因此,系统调用号(可能会在不同的 Windows 版本之间更改)和其他一些值适用于 Win2K SP4。对于编译,我使用 mingw 编译器。
对于 Windows,我尝试将“Hello,write!\n”写入文件,而不是将 Hello world 打印到控制台。我已经有一个可以直接进行系统调用并写入文件的版本(另外它不使用包含)。源代码如下所示:
代码可以在 Win2k 控制台下使用 mingw 编译,如下所示:
这段代码对我有用。它会创建一个内容为“Hello, write!”的 hello.txt。但是这个版本是针对 msvcrt.dll 和 kernel32.dll 链接的(kernel32.dll 使用 ntdll.dll ...)。
对于下一步,我尝试创建一个没有任何依赖项的二进制文件(没有 dll,只有一个真正的静态二进制文件 --> 没有 ntdll.dll,没有 kernel32.dll,没有 msvcrt.dll)
为了创建一个真正的静态二进制文件,我将int main()替换为void __main(void)(并将所有return x;更改为return;在 main 函数内)。之后我编译:
编译工作。但是程序什么都不做(不起作用)(可以启动但没有输出文件(可能没有执行))。现在我的问题;-)
怎么了?必须做什么才能通过直接系统调用和没有任何库(没有 ntdll.dll,没有 kernel32.dll,...)来获得有效的“hello write”。也许有人知道一些很好的参考资料。该解决方案不得针对 Win2k。>= Win 2K 或 ms vc 编译器的解决方案也是 fin ;-) (抱歉我的英语不好)