Tho*_*ler 3 debugging windbg usermode
我可以使用从任意模块转储类型
dt modulename!type
Run Code Online (Sandbox Code Playgroud)
在某些情况下,我看到了例如
dt nt!_TEB
Run Code Online (Sandbox Code Playgroud)
(并且它有效)虽然模块被调用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
Run Code Online (Sandbox Code Playgroud)
如您所见,ntdll
不能总是被替换nt
.
是否有差异dt nt!type
对比dt ntdll!type
或可它总是以它的快捷方式的形式使用?我正在寻找一个可靠的答案来源,而不仅仅是"是".
我试过了:
.hh dt
如果您有一些您想分享的背景知识,可以获得奖励:
nt
可以用来代替ntdll
或是这个dt
特定的?nt
是由调试器查找为$ntsym
或设置的自动别名$ntnsym
.解释是在WinDbg帮助"使用别名"(在MSDN上的在线版本).您可以在需要别名时使用它.
假设您有一个在kernelmode和usermode中都有效的脚本.您可以使用{} NT表示任ntdll
,ntkrnlpa
,ntkrnlmp
,ntoskrnl
或ntwowxxxx
.
不仅ntdll
与ntXXXXX
在内核模式下具有这种自动别名都有共同的功能相当的代码.没有其他模块具有像这两个模块这样的通用代码.例如,ntdll!NtCreateFile
有一个等价物nt!NtCreateFile
,前者是一个存根,通过系统调用到达后者的实际实现.
你不能使用,nt
因为它是无处不在
尝试dt nt!_p
在usermode 自动完成它不会自动完成,但
dt ntdll!_p
将正确
完成evaluate nt
它将错误与无法评估,但
评估? ntdll
将在dt命令得到一个正确的评估nt被特别解析并具有分配适当的模块的功能字符串的值,因此可以在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()
Run Code Online (Sandbox Code Playgroud)
如果你好奇反汇编dbgeng并搜索其中包含字符串typedump的函数,那就是 x dbgeng!*typedump*
其中一个函数有一个suball解析字符串nt并为其赋值
归档时间: |
|
查看次数: |
475 次 |
最近记录: |