说到现场调试,断点是最重要的。通常,在生产环境中解决一个非常复杂的问题需要在本地、非生产环境中调试我自己的一台测试机器。我通常会调试有问题的进程或代码,以便更好地了解它是如何工作的,以及在我进入时需要收集哪些数据。这通常涉及一些逆向工程,并对相关流程或模块进行代码审查。我们总是希望在进行实时调试时尽量减少对生产环境的影响。我称之为设计完美的断点。

我们通常使用几种类型的断点。

最常见的断点是bp,在windbg中设置它很简单:bp 0xaddress。请注意,当您进入用户模式进程时,它会停止进程的执行。当您进入内核调试器时,它会停止整个机器。在这种情况下,我们想知道一旦断点命中,我们将发出什么命令。然后,可以设置断点,以便在插入时自动发出命令。

在遇到断点时运行命令的语法很简单:bp 0xaddress “comand1;command2;…”。例如-bp 0xMYADDRESS “kv;dd g_myGlobal;g” 此命令将在0xMYADDRESS上中断,通过kv转储调用堆栈;将内存转储为从g_MyGlobal地址开始的dword;然后使用g命令继续执行。

另一个很酷的技巧是让一个断点启用或禁用另一个断点或禁用它自己。假设您有一个断点,它太频繁地被命中,以至于每次代码执行时都会中断。但是,一旦满足特定的状态或条件,您可能希望每个调用堆栈都与该断点关联。您所需要做的就是设置一个断点,等待您的关键条件代码执行。然后,这个断点可以启用更昂贵的断点。

示例如下:

bp ntdll!RtlAllocateHeap “kv;g” << 这将是断点1,设置在一个非常常见的调用上。

bd 1 << 禁用断点1,因为在断点2执行之前我们不想看到它的输出。

bp notepad!OpenFile “be 1;g” <<这将在执行NotePad!OpenFile启用断点1

最昂贵的断点类型是ba - 。此断点允许您中断对内存或I/O端口的访问。有几种变体:baw(写中断)、bar(读中断)、bae(执行中断)和bai(用于i/O端口)。

让我们用break-on-write作为示例。语法很简单。ba w4 0xNNNNnnnn。这意味着访问中断,访问类型为WRITE,宽度为4字节,后跟目标地址。但是,由于处理器必须监视对该内存的访问,因此通常会减慢执行时间。这可能是您在另一个条件检查期间有条件地使用be启用的断点。

Ba类型的断点在资源更改时非常方便,并且您不知道是什么代码路径触及它。假设你有一个损坏的临界区。不太可能是某个关键部分api导致了损坏。更有可能的是,有什么东西把记忆给改写了。在这种情况下,您可以简单地对关键部分地址执行baw4,后跟一个“kv;g”,然后让进程运行。您将看到critical section api接触critical section的所有位置;但是,您还将看到任何在该内存上写入的违规者。

条件断点

您也可以在调试器中的断点执行过程中,使用断点后面的部分中的j命令执行条件中断或检查:bp Address “j EXPRESSION ‘If True Commands1;If True command2’;'Else Command1;Else Command2'”

下面是检查对文件打开操作的调用的示例。断点是在调用后的指令上设置的。

bp notepad!SomeNotePadCodeOpeningAFile+0x132 "j @eax >0 '.echo all is good file opened ok;gc';'!gle;kv;lsa eip;gc'“

如果eax(用于存储函数返回值的默认寄存器)为非零,我们将“all is good,file opened ok”回显到命令输出窗口。如果eax为零(表示失败),则!gle显示最后一个错误,通过kv转储调用堆栈,并使用LSA eip在eip地址列出源。

为虫子生,为虫子死,为虫子奋斗一辈子

分类: 调试

设计完美windbg断点的更多相关文章

  1. Windbg断点调试

    [文章主题] Windbg是Windows驱动调试的重要软件,也是必须学习的软件,前面的博客介绍了一些双机调试的环境配置,只要按照我所说的步骤一步步下来就可以完成环境搭建. 本文主要介绍如何调试sys ...

  2. Windbg断点调试.net程序

    程序员都知道,在生产环境中,如果没有系统日志,对问题的分析将非常的困难.即使有日志,有时候也会因为日志记录的不全面,而导致问题不能分析清楚.其实,Windbg里面有Live Debug功能,正好可以借 ...

  3. 设计完美的策略模式,消除If-else

    策略模式是oop中最著名的设计模式之一,是对方法行为的抽象,可以归类为行为设计模式,也是oop中interface经典的应用.其特点简单又实用,是我最喜欢的模式之一.策略模式定义了一个拥有共同行为的算 ...

  4. 第11章 Media Queries 与Responsive 设计

    Media Queries--媒体类型(一) 随着科学技术不断的向前发展,网页的浏览终端越来越多样化,用户可以通过:宽屏电视.台式电脑.笔记本电脑.平板电脑和智能手机来访问你的网站.尽管你无法保证一个 ...

  5. WinDbg调试命令汇总

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

  6. CSS3知识点整理(五)----响应式设计及其他属性

    介绍Media Queries与Responsive设计以及外轮廓属性.resize属性.CSS3生成内容等 学会如何使用CSS3中的Media Queries模块来让一个页面适应不同的终端(或屏幕尺 ...

  7. windbg 常用命令详解

    = kd> ln 8046e100 (8046e100) nt!KeServiceDescriptorTableShadow | (8046e140) nt!MmSectionExtendRes ...

  8. 在Xamarin开发中,UWP环境下无法进入断点调试standard库的问题解决方案

    环境如下 选择的代码共享方案为standard模式 再多平台依赖注入的时候,断点一直提示没有加载文档. 进入到目标平台项目Debug文件夹下,查看.发现standard库引用进来后,对应的*.pdb文 ...

  9. C语言课程设计

    目录 实现目的 游戏玩法介绍 实现流程与作品架构 任务列表及贡献度 总结感想 作品源码与仓库地址(附页) 资料引用与出处(附页) 实现目的 2048,作为一款极其经典的游戏,从发行到现在,已经有了极多 ...

随机推荐

  1. PyCharm切换解释器版本

    Mac PyCharm > Preferences... > Project Interpreter > Python Interpreters Windows File->D ...

  2. 04async await

    async async 函数返回值是一个promise对象,promise对象的状态由async函数的返回值决定   //函数的三种定义 async function hello() { return ...

  3. 常用API【2】

    常用API 1.Math类 1.1 Math类概述 Math包含执行基本数字运算的方法 没有构造方法,如何使用类中的成员呢? 看类的成员是否是静态的,如果是,可以通过类名直接调用 1.2Math类的常 ...

  4. 小程序里的request

    test.js 代码如下: makeRequest: function (e) { var self = this wx.request({ url: 'http://lt.com/home/inde ...

  5. shell中列表的定义与循环

    字符串列表定义方法1: a=(f1 f2 f3 f4) for i in ${a[*]}#遍历每一个列表值 for i in ${a[@]}#遍历每一个列表值 实例: #!bin/basha=(f1 ...

  6. Q200510-03-03 :LRU缓存机制

    LRU缓存机制运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制.它应该支持以下操作: 获取数据 get 和 写入数据 put . 获取数据 get(key) - 如果密钥 ( ...

  7. 关于pom.xml文件中配置jquery,以及如何在jsp中引入

    pom.xml <!-- 对jquery的支持 --> <dependency> <groupId>org.webjars.bower</groupId> ...

  8. Tcahce Stashing Unlink Attack

    今年校赛有点可惜,最后两道质量不错的pwn每做出来,总的来说还是我太菜了,希望下次校赛能AK pwn题.不过这次校赛也没有白打,还是有学到新的东西的.在这里感谢出题的学长. glibc-2.29以后u ...

  9. 通过例子讲解Spring Batch入门,优秀的批处理框架

    1 前言 欢迎访问南瓜慢说 www.pkslow.com获取更多精彩文章! Spring相关文章:Springboot-Cloud相关 Spring Batch是一个轻量级的.完善的批处理框架,作为S ...

  10. 11.redis cluster的hash slot算法和一致性 hash 算法、普通hash算法的介绍

    分布式寻址算法 hash 算法(大量缓存重建) 一致性 hash 算法(自动缓存迁移)+ 虚拟节点(自动负载均衡) redis cluster 的 hash slot 算法 一.hash 算法 来了一 ...