首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WinDbg扩展步进

WinDbg扩展步进
EN

Stack Overflow用户
提问于 2014-01-21 19:21:14
回答 1查看 863关注 0票数 1

我正在尝试编写一个扩展函数,它将运行到下一个调用,然后打印出有关下一个指令的信息。

我正在使用IDebugControl::Execute运行tc。正如文档中所指出的,此调用在跟踪实际发生之前返回。休眠或调用DispatchCallbacks不会在我的扩展返回之前看到tc跟踪。

如何允许跟踪发生而不从调用返回?

如果我添加我自己的DebugEventCallback,那么我可以得到触发的DebuggeeState和EngineState更改的通知,但是不能通过这些回调返回到引擎中。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-22 09:18:50

我认为通过IDebugControl进行调用更改调试器状态不是一个好主意::Execute( g,t,等等)

首先,您应该实现step命令:

代码语言:javascript
复制
control->SetExecutionStatus(DEBUG_STATUS_STEP_OVER);
control->WaitForEvent(DEBUG_WAIT_DEFAULT, INFINITE);

然后你可以做一个打电话签名的人:

代码语言:javascript
复制
registers->GetInstructionOffset( &ip );
control->Disassemble( ip, ..., disasmStr, .. 
return  disasmStr

然后可以构建您自己的tc:

代码语言:javascript
复制
while( CurrentInstruction() != 'call' ) makeOneStep()

您可以使用我们的python扩展:pykd.codeplex.com

Python代码如下所示:

代码语言:javascript
复制
from pykd import disasm, step
while disasm().instruction.find('call') < 0:
   step()
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21267202

复制
相关文章

相似问题

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