问题标签 [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 投票
3 回答
2057 浏览

c - NtDll 真的可以导出 C 运行时函数吗,我可以在我的应用程序中使用它们吗?

我正在查看我的 Windows 10 计算机上的 NtDll 导出表,我发现它导出了标准的 C 运行时函数,如memcpysprintfstrlen等。

这是否意味着我可以在运行时通过LoadLibraryand动态调用它们GetProcAddress?这是否保证适用于每个 Windows 版本?

如果是这样,可以完全删除 C 运行时库(仅使用 NtDll 中的 CRT 函数),从而使我的程序更小?

0 投票
1 回答
586 浏览

winapi - NtQueryInformationFile 返回不正确的分配大小

我使用NtQueryInformationFileFILE_STANDARD_INFORMATION结构来检索文件的分配大小。但对于小文件,它返回不正确的1结果。例如,大小为 1 字节的文本文件返回 8 字节的分配大小,而不是 4096 字节。问题出在哪里?


1 我假设这个值不正确,因为资源管理器(在我的情况下在 Windows XP Checked Build上)磁盘上的大小报告了更高的数字(大小为 1 的文件为 4096 字节)。

0 投票
1 回答
2630 浏览

mysql - MySQL Workbench 6.3.7 在使用 Windows 10 Home 查询时崩溃

我经常遇到 MySQL Workbench (v6.3.7) 查询在执行时崩溃的问题。操作系统是 Windows 10 Home,应用程序事件日志显示以下消息指向faulting moduleC:\WINDOWS\SYSTEM32\ntdll.dll

0 投票
2 回答
2269 浏览

windows - 实现 x86 到 x64 汇编代码切换

我正在研究x86 进程的工作原理,并使用 IDA PRONtDll调试了该函数。NtCreateFile它的代码如下:

Wow64SystemServiceCall()

我查找了命令代码,jmp far ptr byte_7738B8FF 它是EA CF B5 38 77 33 00跳转到另一个段 0x33 jmp 0x33:0x7738b5cf。所以从我在互联网上读到的内容来看,这是 64 位系统上进程的 x64 段基础,对吗?不幸的是,我无法进一步调试,因为 ida 不跟随跳转。但是我制作了另一个为 x64 编译的简单 C 应用程序,并调用CreateFile,附加了 x64 IDA PRO Remote 调试器,并查找了反汇编,NtCreateFile看起来像这样:

所以我有几个问题,从附加的 ntdll 远跳转的 x86 进程的跳转是如何jmp 0x33:0x7738b5cf进入x64_NtCreateFile第一条指令的?在这种情况下,从 x86 到 x64 的切换究竟是如何发生的?基本上我可以制作 x86 应用程序,并通过跳转切换段,然后执行其中的 x64 代码,我可以通过执行类似的操作来创建它db (0x00) ; x64 machine code commands,对吗?

0 投票
0 回答
85 浏览

c++ - 查找谁调用了系统函数

我有一个使用 VisualStudio 2015(更新 2)开发的 C++ 应用程序。

使用 AMD Code XL 进行分析表明,该程序几乎 20% 的时间都花在了RtlUpcaseUnicodeToMultiByteN来自模块的函数中ntdll.dll。显然它将 unicode tsrings 转换为大写。

因为花这么多时间这样做是没有意义的,所以我需要知道谁在调用这个函数。事实证明这并不容易。

我想要做的是设置一个断点,然后查看调用堆栈。但是,如果没有源代码,我无法以通常的方式设置它。

我试过 Windbg,但堆栈跟踪基本上没用。

然后我发现有一种方法可以在 VisualStudio 中设置“函数断点”;但程序从未中断;即使“模块”窗口显示ntdll.dll为“已加载符号”状态。

我还能做什么?

0 投票
0 回答
384 浏览

c++ - Visual Studio 2010 中的 ntdll.dll 分配错误

我有一个使用多个 C++ 库在 Visual Studio 2010 中开发的正确运行的应用程序。我将必要的文件复制到我的笔记本电脑上,以便在我自己的时间处理它并设置所需的环境(VS2010、ITK、VTK、Boost、Qt、FANN、Waffles)。在我的工作计算机上正常运行的代码在我的笔记本电脑上出现运行时错误,我无法找出问题所在。

当我运行代码时,它会中断给出“在 **** (ntdll.dll) - 访问冲突读取位置 **** 处的未处理异常”(出现错误的代码窗口是 calloc_impl.c)。调用堆栈显示 - ntdll.dll!RtlAllocateHeap()。当我尝试查看 ntdll 的符号加载信息时,.pdb 文件是从 Microsoft 公共符号服务器加载的(在我的计算机上找不到它,在 system32 或应用程序文件夹中都找不到)。

这是否与我的笔记本电脑的性能限制有关?还是我设置的环境不完整?我不能发布代码的快照,因为它与工作相关,但我希望我已经把我的问题说清楚了。任何帮助表示赞赏。

0 投票
0 回答
1146 浏览

c - 挂钩 dll 加载到内存

我正在尝试编写一个程序,它将捕获 dll 加载到内存中的事件。为此,我在LdrLoadDllAPI 上加上了一个钩子。这很好用,但问题是这个 API 没有捕获作为依赖项加载的 dll。例如 -

使用LdrLoadDl我将捕获chrome_child.dll加载到内存,但我不会捕获win32u.dll哪个是chrome_child.dll依赖项之一。

有谁知道用于此目的的更好的 API?

0 投票
3 回答
794 浏览

c - C - 仅使用 ntdll 的堆栈分配

是否有 API 调用或任何其他类似方式,仅使用ntdll.dll, 在堆栈上分配内存?

我知道alloca()这样做,但我不能使用它,因为我只能使用ntdll.dll.

谢谢!

0 投票
1 回答
703 浏览

winapi - 在用户模式下调用 native(Nt) API

我正在尝试在用户模式下调用本机 API(NtOpenKey)。我看到链接器问题。我真的很困惑,这里缺少什么。我怎样才能做到这一点?我在这里附上我的代码。ntdll.lib 被添加到项目中(链接)

错误 58 错误 LNK2001:无法解析的外部符号“__declspec(dllimport) long __cdecl NtOpenKey(void * *,unsigned long,struct _OBJECT_ATTRIBUTES *)”(__imp_?NtOpenKey@@YAJPEAPEAXKPEAU_OBJECT_ATTRIBUTES@@@Z) C:\Users\santhi.ragipati\文档\visual studio 2013\Projects\NtRegistry\NtRegistry\NtRegistry.obj NtRegistry

谢谢 Santhi `// NtRegistry.cpp :定义控制台应用程序的入口点。//

0 投票
1 回答
292 浏览

c++ - C++ SysCall asm 未解析的外部

我正在尝试通过 asm 中的系统调用调用 NtReadVirtualMemory。我这样做有几个不同的原因,但这并不重要。所以我在我的主头文件中定义了这样的函数:

我相信的参数是正确的

然后我在项目中创建了一个 ASM 文件。我对它的了解仅足以尝试完成这项任务,因为它只是其中的一小部分。假设你不需要在任何地方包含这个 asm 文件,所以我离开了。这里是:

但是,现在当我编译时,我得到了未解决的外部错误。我相信这是因为我需要在这个 ASM 文件中定义它,但我不确定如何去做。我做错了什么/我应该怎么做。

认为提及我在 Windows 7 上可能很有用,实际系统调用索引为 37,如下表所示:

桌子

对于那些询问的人来说,这是确切的错误:


评论的解决方案仍然出现错误: