zhouhe VT(五)调试技巧
前提概要
zhouhe老师在VT的时候遇到了一个问题:在GuestEntry入口点把vmcall指令写成int 3指令会导致windbg断不下来,无论是在GuestEntry还是VMMEntryPointEbd都断不下来
一、分析原因
CPU并没有在Guest断下来,而是直接来到了Host,说明Guest在执行某行代码时抛出了VM-Exit信号,由于Guest的int 3还没有处理完就去处理Host的int 3,导致Host的int 3也断不下来,引发了调试器重入问题
int 3不只是一个指令,在它被调试器识别连接的过程中包含了很多代码,在这些代码中可能有一些代码影响到了Guest,我们需要找出那一些代码
二、CE搜索
利用全局数组与extern关键词的方式间接搜索到g_GuestRegs.eip的值
我这里,可能是因为windbg自动处理了调试器重入问题了吧,我即可以断下来,也搜不到要搜的数。。。
CE搜索的方法有局限性,如果vt运行在物理机的话,就不好CE搜索本机了
因此,介绍了第二种调试的方法
三、栈回溯
由于guest里的int 3没有执行完毕就跳到了host中,我们可以调回guest,使其int 3命令执行完毕
这里就要保存好寄存器,做好,栈回滚任务
代码如下
这个方法可以说十分好用
四、找到问题代码点
出错的点就是发生在读CR3的时候
该节所写的完整代码链接:
__EOF__

本文作者:_TLSN
本文链接:https://www.cnblogs.com/lordtianqiyi/articles/16154628.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/lordtianqiyi/articles/16154628.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现