命令说明

sx 命令用于控制当异常或者事件发生时调试器的行为。

Sx命令对应 windbg.exe(gui)的”debug”菜单项中的”Event Filters”子菜单项。

基本语法如下:

sx

sx{e|d|i|n} [-c "Cmd1"] [-c2 "Cmd2"] [-h] {Exception|Event|*}

sx- [-c "Cmd1"] [-c2 "Cmd2"] {Exception|Event|*}

sxr

用法如下:

Sx:列出所有支持的event与exception。

Sxr:恢复事件与异常处理到默认配置。

sx{e|d|i|n} [-c "Cmd1"] [-c2 "Cmd2"] [-h] {Exception|Event|*}

e|d|i|n的区别如下:

从是否处理来说,e|d|i|n分为两类:

另外还有比较关键的是 [-c "Cmd1"] [-c2 "Cmd2"]。

从help文件看,-c与-c2的区别主要在异常发生时,调试器终端的时机。 当进程抛出一个异常后,内核会检查当前进程的调试端口是否为空(是否有调试器附加在进程上),如果调试端口存在,则会将异常抛到调试端口中,由调试器决定是否处理这个异常,这就是所谓的first chance。

如果调试器不处理这个异常(调试器很有可能会把处理的机会留给异常处理块),则内核会继续将异常发送到进程的异常端口,由异常处理块来处理这个异常。

应用层的异常处理以链表的形式链在一起(有兴趣可以研究下SEH的汇编实现,很有意思),其尾部为默认的异常处理器 UnhandledExceptionFilter,当异常第一次路由到UnhandledExceptionFilter并且进程被调试器附加的情况下,UnhandledExceptionFilter会将异常再次发给调试器处理,这就是所谓的second chance。此时调试器必须谨慎对待这个异常了,这说明这个异常是程序员没有意料到的异常。如果调试器依然没有处理,那么程序被终止。

First chance与second chance的分发流程挺有意思,部分程序会利用这个特性就行反调试。

简单应用

Sx在我的日常调试中,主要用于两个方面,都与模块加载事件有关(ld:加载事件;ud:卸载事件):

1.实现bu功能:

当需要对某个未加载模块下断点,一般会用到bu命令。不过在调试中,如果符号没有正确加载,则bu可能会失效。在这种情况下,sxe命令可以完成相同功能。

假设要对 mod!fun + 0x12下断点,则在程序初始断点中执行 sxe ld:mod 命令,当mod被加载时,调试器会断下。x mod!* 列出所有符号,然后 bp mod!fun + 0x12就能完成断点的设置。

2.dll加载失败原因:

实践中经常会跑到dll加载失败或者被提前卸载的问题,原因很多。包括dll依赖的库找不到;dll的导出接口不足等。

假设mod.dll加载失败,在进程的初始断点中执行 sxe ld:mod。当mod加载被断下后执行 sxe ud:mod命令。当调试器被重现断下时,k出堆栈,查看卸载原因。

在dll加载失败的情况下,一般是LdrLoadDll失败,从而调用到LdrUnloadDll。我们只要在执行序列中持续 shift+f11 就能获取到 LdrLoadDll 返回值,也就能获取到dll加载失败的原因了。

windbg sx命令与简单应用相关推荐

  1. Windbg调试命令详解

    Windbg调试命令详解 发表于2013 年 8 月 23 日 转载注明>> [作者:张佩][原文:http://www.yiiyee.cn/Blog] 1. 概述 用户成功安装微软Win ...

  2. Windbg调试命令详解(3)

    3 进程与线程 既可以显示进程和线程列表,又可以显示指定进程或线程的详细信息.调试命令可以提供比taskmgr更详尽的进程资料,在调试过程中不可或缺. 3.1 进程命令 进程命令包括这些内容:显示进程 ...

  3. 搬运! Windbg调试命令详解

    转载注明>> [作者:张佩][原文:http://www.yiiyee.cn/Blog] 1. 概述 用户成功安装微软Windows调试工具集后,能够在安装目录下发现四个调试器程序,分别是 ...

  4. 博客摘录「 Windbg调试命令汇总」2023年4月15日

    目录 1.Windbg调试器介绍 2.Windbg版本说明 3.Windbg命令汇总 VC++常用功能开发汇总(专栏文章列表,欢迎订阅,持续更新...) https://blog.csdn.net/c ...

  5. Windbg 基础命令 《第一篇》

    Windbg.exe是Windows的一个调试工具,它支持两种调试模式,即"实时调试模式(Living)"和"事后调试模式(Postmortem)". 实时模式 ...

  6. windbg 常用命令详解

     一. 1. !address eax 查看对应内存页的属性 2. vertarget 显示当前进程的大致信息 3 !peb 显示process Environment Block 4. lmvm ...

  7. WinDBG扩展命令的工作原理

    Windbg扩展命令原理 Depends tool - Scan dependent modules on windows for dll, exe, sys files http://depende ...

  8. Windump网络命令的简单用法

    Windump网络命令的简单用法 大家都知道,unix系统下有个tcpdump的抓包工具,非常好用,是做troubleshooting的好帮手.其实在windows下也有一个类似的工作,叫windum ...

  9. C/C++:Winsock网络编程—ping命令的简单实现

    Winsock网络编程-ping命令的简单实现 前言 先声明 博主实现的是Windows平台的ping命令的简单实现,没有做域名解析,只能直接ping ip.我们要实现ping 肯定得先知道ping的 ...

最新文章

  1. K12,再好的愿景遇到商业都会慢慢失去真正的目标
  2. some understanding of《Inferring Decision Trees Using the Minimum Description Length Principle*》
  3. 在Go语言程序中使用gojson来解析JSON格式文件
  4. Android设计模式之——解释器模式
  5. Hadoop webHDFS设置和使用说明
  6. 0054-软件版本号问题
  7. 点喷丸打标机行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
  8. android activity传值到dialog,android 自定义AlertDialog 与Activity相互传递数据
  9. Qt Creator 2.8.1,qt4.8.5 需要含gcc4.4 的mingw
  10. 计算机组成原理完整学习笔记(三):存储器
  11. 性能测试基础(附:性能测试报告模板)
  12. Cyberpunk!特斯拉发布皮卡,造型雷翻众人
  13. js页面跳转 和 js打开新窗口 方法
  14. matlab 莫比乌斯曲面,神奇的莫比乌斯带,只有一个曲面可以无限循环
  15. 位、字节、字符的简介
  16. mysql chinanet外网连接不上_china net是什么无线网
  17. vba word 查找_知乎高赞:Word中有哪些批量神技,让你相见恨晚
  18. 赛客乐u无线路由器测速服务器繁忙,无线路由器网速慢怎么办?
  19. DD373自动发布工具/DD373辅助/DD373外挂
  20. 【第29篇】MPViT:用于密集预测的多路径视觉转换器

热门文章

  1. markdown语法简明笔记
  2. Java自动化测试框架-02 - TestNG之理论到实践 - (详细教程)
  3. mysql limit分页_MySQL order by limit 分页数据重复问题
  4. c++ 哈希表_C语言精华知识:表驱动法编程实践
  5. IDEA如何使用热部署方式启动项目?
  6. kotlin和python哪个好_python替代品for一些java及kotlin功能(慎入啊慎入)
  7. 优秀logo设计解析_日本的logo设计为什么那么优秀?
  8. python虚拟环境安装包在哪_ubuntu环境下python虚拟环境的安装
  9. linux十分钟调度一次,linux系统任务调度命令crontab
  10. poj3233(矩阵快速幂的和)