开源小小调试器-MiniDebugger

MiniDebugger是我在最近设计的一款调试器.我通过这个小项目试图去探究一些功能的原理以及完成一些自认为有趣的功能,也算是一种自我锻炼.

项目地址:

http://code.taobao.org/p/MiniDebuger/src/

设计思考

做一个自己真正会去用的调试器.这个十分必要.如你所知,有非常多的优秀的调试器,伴随一名程序调试者.它们包括OD,WinDBG,X64DBG,以及IDA.

想要自己平时能用的上,在这方面我可是很挑剔的.就需要实现一些人无我有的小功能.

我比较喜欢WinDBG的命令行界面,所以做成了这样:`(**∩_∩)′

不要说人家丑嘛,人家很温柔的….

流程架构

左边是UI线程,右边是调试循环线程.

使用了开源的BeaEngine反汇编引擎,其特点如下:

  1. 最优秀的开源反汇编引擎之一
  2. 目前几乎支持x86及AMD64平台下的所有汇编指令.
  3. 反汇编结果支持自由定义,可以实现一些比较复杂的显示方法.
  4. 不支持汇编操作,只支持反汇编.

看到这里,小伙伴们是否对BeaEngine很感兴趣呢?

功能

  1. 有意思的几个功能点:

    • 栈回溯:通过栈帧关系,追溯当前线程调用过的所有进程.下一步会结合IAT表使该功能更完善.
    • 调试输出信息查看.关闭你的DBGVeiw吧如果你只是想查看一下自己程序输出的信息
  2. 支持命令列表

当前版本不足之处

  1. 没有使用类进行封装(我去~)
  2. 在寻求更佳的数据结构方案.

不过这只是首个版本,后续不仅会对框架进行调整.预期还会在如下几个方面进行加强:

1. 更佳的断点策略.特别是针对软件断点的一些改善

2. 反AntiDebugger策略的加入.

开发小心得

  1. 如果你转移了一段代码.

    • 在新的位置,前置参数还未初始化.检查它.
    • 在旧的位置,可能本来就需要一份同样的代码.而不是剪切.
  2. 补丁

    一个地方出了问题,与它工作机制类似的地方同样可能需要补丁.

项目地址:

http://code.taobao.org/p/MiniDebuger/src/

2015年8月9日 10:39

版权声明:本文为博主原创文章,在注明作者和来源的情况下可自由转载。

时间: 2024-08-29 15:50:35

开源小小调试器-MiniDebugger的相关文章

推荐两款Windows下的开源调试器

在软件开发过程中,调试器可以说是一个得力助手,善用它你就可以快速定位bug并消灭之. 想想以前不会使用调试器功能的时候只靠输出数据来差错的方式,真是效率太低了. 如果你对调试器的运行原理好奇,学习开源软件是最好的途径.当然必备的入门书籍还是有必要的,如张银奎先生的<软件调试>一书就是本经典书籍. 言归正传,下面向大家推荐两款值得学习用的调试器.首先向大家推荐的是Nanomite,这是我在github上最早接触的一款开源调试器,支持x86/x64调试,可惜现在已经不更新了,但是基本功能都已经实现

Xdebug开源PHP程序调试器

Xdebug是一个开放源代码的PHP程序调试器(即一个Debug工具),可以用来跟踪,调试和分析PHP程序的运行状况. 本文为大家讲解的是在linux下xdebug的安装和配置方法,感兴趣的同学参考下. xdebug简介 Xdebug是一个开放源代码的PHP程序调试器(即一个Debug工具),可以用来跟踪,调试和分析PHP程序的运行状况. xdebug安装 首先让php错误显示,只需要修改php.ini当中的2条指令,把 displayerrors和htmlerrors都设置为On,如下所示 h

Lua编辑调试器 BabeLua

Lua编辑器 Lua调试器 LuaIDE LuaEdit LuaEditor BabeLua入门 BabeLua简介 BabeLua是一款基于VS2012/2013(简称VS)的免费开源的Lua集成开发环境,在Lua编辑和调试方面,具有如下功能和特性: ●Lua语法高亮 ●语法检查 ●自动补全 ●一键注释 ●格式化代码 ●自定义代码折叠 ●工程管理 ●快速搜索和跳转 ●文件大纲 ●注入宿主程序内对Lua脚本进行调试 ●设置断点观察变量值 ●查看堆栈信息 BabeLua可以调试哪些程序 已经通过测

与调试器共舞 - LLDB 的华尔兹

你是否曾经苦恼于理解你的代码,而去尝试打印一个变量的值? 1 NSLog(@"%@", whatIsInsideThisThing); 或者跳过一个函数调用来简化程序的行为? 1 NSNumber *n = @7; // 实际应该调用这个函数:Foo(); 或者短路一个逻辑检查? 1 if (1 || theBooleanAtStake) { ... } 或者伪造一个函数实现? 1 2 3 4 5 6 int calculateTheTrickyValue {   return 9;

.NET dnSpy 程序集编辑器,反编译器和调试器

https://github.com/0xd4d/dnSpy dnSpy是反向工程.NET程序集的工具.它包括一个反编译器,一个调试器和一个程序集编辑器(和更多),可以通过编写自己的扩展名来轻松地扩展.它使用dnlib来读取和写入程序集,因此它可以处理混淆的程序集(例如恶意软件)而不会崩溃. 二进制 最新发布 最新版本:  或者从源代码构建,请参阅Wiki. 特征 开源(GPLv3)和免费永远(:TM :) 装配编辑器 使用C#或Visual Basic编辑任何方法,属性和事件 代码编辑器具有I

[Win32]一个调试器的实现(十)显示变量

[Win32]一个调试器的实现(十)显示变量 作者:Zplutor 出处:http://www.cnblogs.com/zplutor/ 本文版权归作者和博客园共有,欢迎转载.但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利. 上回介绍了微软的符号模型,有了这个基础知识,这回我们向MiniDebugger中添加两个新功能,分别是显示变量列表和以指定类型显示内存内容.显示变量列表用于列出当前函数内的局部变量或者全局变量:以指定类型显示内存内容用于读取指定

[Win32]一个调试器的实现(十一)显示函数调用栈

[Win32]一个调试器的实现(十一)显示函数调用栈 作者:Zplutor 出处:http://www.cnblogs.com/zplutor/ 本文版权归作者和博客园共有,欢迎转载.但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利. 本文讲解如何在调试器中显示函数调用栈,如下图所示: 原理 首先我们来看一下显示调用栈所依据的原理.每个线程都有一个栈结构,用来记录函数的调用过程,这个栈是由高地址向低地址增长的,即栈底的地址比栈顶的地址大.ESP寄存器的

转:iOS LLDB调试器和断点调试

本文转自:http://www.cnblogs.com/wfwenchao/p/3991060.html?utm_source=tuicool&utm_medium=referral 技巧一:运行时修改变量的值 你以前怎么验证是不是某个变量的值导致整段程序不能正常工作?修改代码中的变量的值,然后cmd+r重新启动app?现在你不需要这么做了,只需要设置一个断点,当程序在这进入调试模式后,使用expr命令即可在运行时修改变量的值. 假如有一个loginWithUsername:方法,需要两个参数:

使用GDB调试器(一)

使用GDB调试器 GDB概要---- GDB是GNU开源组织公布的一个强大的UNIX下的程序调试工具.也许,各位比較喜欢那种图形界面方式的,像VC.BCB等IDE的调试,但假设你是在UNIX平台下做软件,你会发现GDB这个调试工具有比VC.BCB的图形化调试器更强大的功能.所谓"寸有所长.尺有所短"就是这个道理. 一般来说.GDB主要帮忙你完毕以下四个方面的功能: 1.启动你的程序,能够依照你的自己定义的要求随心所欲的执行程序.    2.可让被调试的程序在你所指定的调置的断点处停住.