gpt4 book ai didi

debugging - dt nt!_TEB 和 dt ntdll!_TEB 有区别吗?

转载 作者:行者123 更新时间:2023-12-02 22:31:21 28 4
gpt4 key购买 nike

我可以使用从任意模块转储类型

dt modulename!type

在某些情况下,我看到例如

dt nt!_TEB

(并且它有效)尽管该模块名为 ntdll:

0:001> lm m nt
start end module name
0:001> lm m ntdll
start end module name
00000000`76e00000 00000000`76fa9000 ntdll (pdb symbols) d:\...\ntdll.pdb

正如您在上面所看到的,ntdll 并不总是可以被 nt 替换。

dt nt!typedt ntdll!type 之间有区别吗?还是可以始终以其快捷方式形式使用?我正在寻找有来源的可靠答案,而不仅仅是"is"。

我已经尝试过:

  • 阅读 WinDbg 帮助 .hh dt

如果您有一些想要分享的背景知识,还有额外的问题:

  • 是否有其他命令可以使用 nt 来代替 ntdll 或者这是 dt 特定的?
  • 还有其他模块有快捷方式吗?
  • 这从何而来(例如,这种行为是否有历史背景)?

最佳答案

nt是由调试器查找 $ntsym 设置的自动别名或$ntnsym 。解释位于 WinDbg 帮助“使用别名”( online version at MSDN )。您可以在任何需要该别名的地方使用它。

假设您有一个可以在内核模式和用户模式下运行的脚本。您可以使用 {nt} 来表示 ntdll 之一, ntkrnlpa , ntkrnlmp , ntoskrnlntwowxxxx .

不仅ntdllntXXXXX在内核模式下具有此自动别名,因为两者具有功能相同的共同代码。没有其他模块像这两个模块一样具有通用代码。例如ntdll!NtCreateFile具有等效的 nt!NtCreateFile其中前者是一个 stub ,通过系统调用到达后者的真正实现。

您不能使用nt到处都是。例如,自动补全 dt nt!_p在用户模式下不会自动完成,但 dt ntdll!_p将正确自动完成。 evaluate nt它将错误 无法评估 但评估 ? ntdll会起作用的。

ntdt 中专门解析命令并具有为字符串分配适当的模块值的函数,以便可以在 dt 中使用它照原样。

解析 nt 的函数的伪代码如下:

switch(GetToken(wcschr(inputstr ,"!")) == "nt" )
case usermode nt = "ntdll";
case kmode nt = "Nt" using machineinfo.NtModule (ntos .......)
case wow nt = "Nt32" using getnt32module()

如果您好奇,请反汇编 dbgeng 并搜索其中包含字符串类型转储的函数,即 x dbgeng!*typedump*其中一个函数有一个子调用,用于解析字符串 nt 并为其分配一个值。

关于debugging - dt nt!_TEB 和 dt ntdll!_TEB 有区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29526072/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com