首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >"DbgCommand()“也能得到超链接结果吗?

"DbgCommand()“也能得到超链接结果吗?
EN

Stack Overflow用户
提问于 2018-09-06 12:18:26
回答 2查看 175关注 0票数 1

这个问题中,我尝试让Windbg脚本工作,但也许我可以使用PYKD来解决我的问题。我的问题是:

我启动命令~* k,并得到以下响应(正如在前面提到的问题中,我喜欢强调超链接,因此图像而不是简单文本):

我想模拟一下鼠标点击这一行,包含CServiceModule::Run.当我在相应的超链接02上悬停时,我看到以下Windbg命令:

代码语言:javascript
复制
dx Debugger.Sessions[0].Processes[4416].Threads[4436].Stack.Frames[2].SwitchTo();dv /t /v

到目前为止,我已经尝试过自己重新创建这个命令,但是现在我意识到,如果我能够从响应本身得到这个命令,我的问题就解决了。

据我所知,PYKD DbgCommand()只给出响应的文本部分(所以,没有给出超链接下的信息)。

有没有办法从DbgCommand()命令中获取这个超链接?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-09-11 07:26:05

如果您知道帧号,可以使用pykd.setFrame命令切换帧。但是您应该记住,pykd不支持内联函数框架。因此,许多帧可以不同于windbg输出。可以使用命令‘inline0’禁用内联函数。

pykd脚本可以如下所示:

代码语言:javascript
复制
frames = getStack()
for frameNumber in xrange( len(frames) ):
    if "ServiceModule::Run" in findSymbol(frames[frameNumber].ip):
          setFrame(frameNumber)
          dprintln("frame switched")

额外编辑以提高可读性

正如在下面的评论中提到的,有一个问题被提到了PYKD,名为"dbgCommand不支持DML命令输出":换句话说:目前DML还没有得到PYKD DbgCommand()的支持。

票数 0
EN

Stack Overflow用户

发布于 2018-09-11 20:18:20

kb结果

代码语言:javascript
复制
0:000> kb
 # ChildEBP RetAddr  Args to Child              
00 000bf618 76fa0e00 7ffdf000 7ffda000 76ff714c ntdll!LdrpDoDebuggerBreak+0x2c
01 000bf778 76f860a7 000bf7ec 76f20000 76c245cb ntdll!LdrpInitializeProcess+0x11a9
02 000bf7c8 76f83659 000bf7ec 76f20000 00000000 ntdll!_LdrpInitialize+0x78
03 000bf7d8 00000000 000bf7ec 76f20000 00000000 ntdll!LdrInitializeThunk+0x10

当我单击dml链接02时,我得到

代码语言:javascript
复制
0:000> dx Debugger.Sessions[0].Processes[2684].Threads[3736].Stack.Frames[2].SwitchTo();dv /t /v
Debugger.Sessions[0].Processes[2684].Threads[3736].Stack.Frames[2].SwitchTo()
Unable to enumerate locals, Win32 error 0n87
Private symbols (symbols.pri) are required for locals.
Type ".hh dbgerr005" for details.

正如我在前面的答案中强调的那样,同样的情况可以通过

dx @$curstack.Frames2.SwitchTo();dv /v /t

键入此命令与单击02链接完全相同。

代码语言:javascript
复制
0:000> dx @$curstack.Frames[2].SwitchTo();dv /v /t
@$curstack.Frames[2].SwitchTo()
Unable to enumerate locals, Win32 error 0n87
Private symbols (symbols.pri) are required for locals.
Type ".hh dbgerr005" for details.

只有当您使用可用的源进行调试时,这才会有意义--这里是堆栈的示例,而框架2则是使用源代码的示例。

我使用kbL将src行信息隐藏在堆栈跟踪中,然后单击frame no 2 DML链接,然后键入命令,就像单击一样打印相同的信息。

现在,如果您说我需要看到"RUN“字符串,而不是使用数字2,那么您应该编写一个脚本来解析每一行,就像我在前面给您链接的线程的答复中所显示的那样。

代码语言:javascript
复制
0:000> kbL
 # ChildEBP RetAddr  Args to Child              
00 (Inline) -------- -------- -------- -------- mfctest!CThreadLocal<_AFX_THREAD_STATE>::GetData
01 0025fe48 012fbc2f 015bf7a8 012fd4bd ffffffff mfctest!AfxGetThreadState
02 0025fe64 0151979e 00000000 015c6360 7ffdb000 mfctest!CWinThread::Run+0xf
03 0025fe7c 014c17d5 012e0000 00000000 00322d3e mfctest!AfxWinMain+0x93
04 (Inline) -------- -------- -------- -------- mfctest!invoke_main+0x1a
05 0025fec8 76e8ed6c 7ffdb000 0025ff14 76f837eb mfctest!__scrt_common_main_seh+0xf8
06 0025fed4 76f837eb 7ffdb000 76b22d01 00000000 kernel32!BaseThreadInitThunk+0xe
07 0025ff14 76f837be 014c1892 7ffdb000 00000000 ntdll!__RtlUserThreadStart+0x70
08 0025ff2c 00000000 014c1892 7ffdb000 00000000 ntdll!_RtlUserThreadStart+0x1b


clicking link with number 2
0:000> dx Debugger.Sessions[0].Processes[620].Threads[2228].Stack.Frames[2].SwitchTo();dv /t /v
Debugger.Sessions[0].Processes[620].Threads[2228].Stack.Frames[2].SwitchTo()
@ebx              class CWinThread * this = 0x015bf7a8 {h=0xfffffffe proc={...}}
<unavailable>     long lIdleCount = <value unavailable>
@eax              class _AFX_THREAD_STATE * pState = 0x0153b820
<unavailable>     int bIdle = <value unavailable>


using command (NOT CLICKING BUT TYPING THIS )
0:000> dx @$curstack.Frames[2].SwitchTo();dv /v /t
@$curstack.Frames[2].SwitchTo()
@ebx              class CWinThread * this = 0x015bf7a8 {h=0xfffffffe proc={...}}
<unavailable>     long lIdleCount = <value unavailable>
@eax              class _AFX_THREAD_STATE * pState = 0x0153b820
<unavailable>     int bIdle = <value unavailable>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52203953

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档