设计完美windbg断点
说到现场调试,断点是最重要的。通常,在生产环境中解决一个非常复杂的问题需要在本地、非生产环境中调试我自己的一台测试机器。我通常会调试有问题的进程或代码,以便更好地了解它是如何工作的,以及在我进入时需要收集哪些数据。这通常涉及一些逆向工程,并对相关流程或模块进行代码审查。我们总是希望在进行实时调试时尽量减少对生产环境的影响。我称之为设计完美的断点。
我们通常使用几种类型的断点。
最常见的断点是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断点的更多相关文章
- Windbg断点调试
[文章主题] Windbg是Windows驱动调试的重要软件,也是必须学习的软件,前面的博客介绍了一些双机调试的环境配置,只要按照我所说的步骤一步步下来就可以完成环境搭建. 本文主要介绍如何调试sys ...
- Windbg断点调试.net程序
程序员都知道,在生产环境中,如果没有系统日志,对问题的分析将非常的困难.即使有日志,有时候也会因为日志记录的不全面,而导致问题不能分析清楚.其实,Windbg里面有Live Debug功能,正好可以借 ...
- 设计完美的策略模式,消除If-else
策略模式是oop中最著名的设计模式之一,是对方法行为的抽象,可以归类为行为设计模式,也是oop中interface经典的应用.其特点简单又实用,是我最喜欢的模式之一.策略模式定义了一个拥有共同行为的算 ...
- 第11章 Media Queries 与Responsive 设计
Media Queries--媒体类型(一) 随着科学技术不断的向前发展,网页的浏览终端越来越多样化,用户可以通过:宽屏电视.台式电脑.笔记本电脑.平板电脑和智能手机来访问你的网站.尽管你无法保证一个 ...
- WinDbg调试命令汇总
一. 1. !address eax 查看对应内存页的属性 2. vertarget 显示当前进程的大致信息 3 !peb 显示process Environment Block 4. lmvm 可以 ...
- CSS3知识点整理(五)----响应式设计及其他属性
介绍Media Queries与Responsive设计以及外轮廓属性.resize属性.CSS3生成内容等 学会如何使用CSS3中的Media Queries模块来让一个页面适应不同的终端(或屏幕尺 ...
- windbg 常用命令详解
= kd> ln 8046e100 (8046e100) nt!KeServiceDescriptorTableShadow | (8046e140) nt!MmSectionExtendRes ...
- 在Xamarin开发中,UWP环境下无法进入断点调试standard库的问题解决方案
环境如下 选择的代码共享方案为standard模式 再多平台依赖注入的时候,断点一直提示没有加载文档. 进入到目标平台项目Debug文件夹下,查看.发现standard库引用进来后,对应的*.pdb文 ...
- C语言课程设计
目录 实现目的 游戏玩法介绍 实现流程与作品架构 任务列表及贡献度 总结感想 作品源码与仓库地址(附页) 资料引用与出处(附页) 实现目的 2048,作为一款极其经典的游戏,从发行到现在,已经有了极多 ...
随机推荐
- iOS NSOperation
iOS NSOperation 一.简介 除了,NSThread和GCD实现多线程,配合使用NSOperation和NSOperationQueue也能实现多线程编程 NSOperation和NSOp ...
- 使用easyexcel时遇到Could not initialize class net.sf.cglib.beans.BeanMap$Generator
可以访问 这里 查看更多关于大数据平台建设的原创文章. 上一篇文章 Maven项目为什么会产生NoClassDefFoundError的jar包冲突 结合了大量的图解,详细介绍了Maven项目产生ja ...
- 面试【JAVA基础】JVM
1.内存模型 1.1.堆 堆是所有线程共享的,主要存放对象实例和数组. 新生代和老年代的比例是1:2. 新生代中三个区域的比例是 8 : 1 : 1. 1.1.1.新生代 对象分配在eden区中,当e ...
- 对于分布式Job的思考
引言 在清理Github的时候,发现以前写的一个简单的分布式任务分发系统ClawHub/task-distribution,使用了zk的选主与队列,调度器使用spring的ThreadPoolTask ...
- WebApi OAuth2身份认证
一.什么是OAuth OAuth是一个关于授权(Authorization)的开放网络标准,目前的版本是2.0版.注意是Authorization(授权),而不是Authentication(认证). ...
- 斗篷指令、属性指令、表单指令、条件指令、循环指令、js的Array操作、前台数据库、
```python"""1)指令 属性指令:v-bind 表达指令:v-model 条件指令:v-show v-if 循环指令:v-for 斗篷指令:v-cloak 2) ...
- 单线程模式从网易下载A股叁仟捌佰支股票一年的交易数据耗时十四分钟
代码下载:https://files.cnblogs.com/files/xiandedanteng/StockDataDownloader20200305.rar 压缩包内包含股票代号文件,调整好日 ...
- Jenkins下Vue自动部署(一)
1,服务器上安装docker http://www.runoob.com/docker/ubuntu-docker-install.html?tdsourcetag=s_pctim_aiomsg 2, ...
- wireshark在ubuntu系统中的正确安装方法
以前一直在使用wireshark这个网络工具,最近在用来抓包学习MQTT协议的时候,发现wireshark暂时还未加入对MQTT协议分析的原生支持,网上搜了一下,可以自己用插件的形式扩展wiresha ...
- 反向代理搭建隧道,服务器系统为Ubuntu18.04
该文章参考了实验室师兄写的教程,并记录了自己在实操过程中的坑. 1.内网机器配置 假设现在有一台公用服务器和一台内网服务器,现在想通过反向代理的方式来访问内网服务器.假设公用服务器为A,内网服务器为B ...