利用Win32 Debug API打造自己的Debugger

 原理篇:http://blog.csdn.net/hackwaly/archive/2007/03/26/1542075.aspx 很多朋友都梦想有自己的Debugger程序,今天我们就来自己制作一个。作为一个Debugger程序,其最基本的功能框架其实就是完成2件事情: 启动目标程序。 实时监控目标程序的运行,并做出相应的应对。我们要打造自己的Debugger程序,实际上也只需要完成这两个
摘要由CSDN通过智能技术生成
 原理篇: http://blog.csdn.net/hackwaly/archive/2007/03/26/1542075.aspx 很多朋友都梦想有自己的Debugger程序,今天我们就来自己制作一个。作为一个Debugger程序,其最基本的功能框架其实就是完成2件事情:
 启动目标程序。
 实时监控目标程序的运行,并做出相应的应对。
我们要打造自己的Debugger程序,实际上也只需要完成这两个功能就可以了。当然,要完成这两个特定的功能,我们不可能从头开始造轮子,要首先看看操作系统给我们提供了什么样的基础设施:
由于我们是在Windows平台上工作,自然离不开微软公司提供的文档大全——MSDN。翻开MSDN,定位到“Debugging and Error Handling”,一些最基本的Windows Debug信息都在这里面。不过与其他栏目相比,这个栏目的信息明显显得单薄许多——也许越是底层、强大的技术,微软越不想公开吧。
初步浏览之后,我们可以确定,对于我们的Debugger而言,最重要的Debug API有如下几个:
 CreateProcess —— 用于创建被调试进程
 WaitForDebugEvent —— Debug Loop(调试循环)的主要构成函数
 ContinueDebugEvent —— 用于构成Debug Loop
 GetThreadContext —— 得到被调试进程的寄存器信息
 SetThreadContext —— 设置被调试进程的寄存器信息
 ReadProcessMemory —— 得到被调试进程的内存内容
 WriteProcessMemory —— 设置被调试进程的内存内容
最重要的数据结构有如下几个:
 CONTEXT —— 寄存器结构
 STARTUPINFO —— Start信息
 PROCESS_INFORMATION —— 进程相关信息
 DEBUG_EVENT —— Debug Event(调试事件)结构
可以说,我们的Debugger程序就是利用这几个API函数结合下面的几个数据结构,完成我们指定的功能。那么下面就让我们先来看看这几个API和数据结构的具体含义:

 

Debug API解析
在这里,我们将对上面所述的几个Debug调试API做一个检阅式的考察,大概介绍一下每个API的应用领域。而将这些API应用到具体实践中去,将会在下一部分“实例解析”中,给出详细的说明。
1.CreateProcess。
函数原型:BOOL CreateProcess(
LPCTSTR lpApplicationName, // 要创建的进程模块名
LPTSTR lpCommandLine, // 命令行字符串
LPSECURITY_ATTRIBUTES lpProcessAttributes, // 进程安全属性
LPSECURITY_ATTRIBUTES lpThreadAttributes, // 线程安全属性
BOOL bInheritHandles, // 句柄继承选项
DWORD dwCreationFlags, // 进程创建选项
LPVOID lpEnvironment, // 进程环境块数据指针
LPCTSTR lpCurrentDirectory, // 当前目录名
LPSTARTUPINFO lpStartupInfo, // 启动信息
LPPROCESS_INFORMATION lpProcessInformation // 进程信息
);
函数解析:该函数是Windows平台提供的最基本的创建进程的函数。每当我们双击一个EXE可执行文件,Windows内核就会自动调用该函数创建我们双击的文件所对应的进程。该函数中,最重要的参数有三个:一个是进程模块名,指明了要创建哪个进程;一个是进程创建选项,指明了要如何创建目标进程;对于Debugger程序而言,最常用的创建选项就是:DEBUG_PROCESS|DEBUG_ONLY_THIS_PROCESS。最后还有一个就是进程信息,我们调用CreateProcess创建了进程以后,Windows会将新创建的进程的相关信息全部放到ProcessInfo信息块中,我们在Debug Loop调试循环中使用进程信息块中的数据与目标进程交互,监视和控制目标进程的动作。
2.WaitForDebugEvent。
函数原型:BOOL WaitForDebugEvent(
LPDEBUG_EVENT lpDebugEvent, // Debug Event(调试事件指针)
DWORD dwMilliseconds // 超时设置
);
函数解析:该函数构成了Debug Loop调试循环的主体,一个Debugger程序在创建出目标进程后,一般都会紧接着循环调用该函数等待目标进程的各种调试信息,这个循环调用WaitForDebugEvent的过程,我们就称之为Debug Loop调试循环。调试循环是所有Debugger程序的主

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
这是一个windows脚本调试器程序。 绿色:只需复制文件到同一目录下就可以了。 纯净:基本不使用注册表,只是在注册文件类型图标和文件关联时才使用了注册表。 无毒:绝对没有任何恶意代码,但是由于程序会自动产生临时的批处理文件,可能会被杀毒软件误报。 注意:如果不能启动,下载vcredist_x86.exe安装VC运行库,然后再试。 已经实现的功能: 设置断点; 在断点命中时在代码编辑器指示哪个断点被命中。 在断点命中时可以观察现场状态【变量、ErrorLevel、当前目录】; 如果批处理没有调用Exit退出,那么可以观察到批处理执行完的现场状态; 调试暂停时会自动打开/切换文件并滚动代码窗口,使当前断点可见; 可以预设批处理执行前的环境变量和当前目录。 工程管理,也就是管理批处理文件、断点、观察变量、初始环境变量、初始当前目录、批处理入口文件、批处理文件命令行参数的信息。 支持用户自定义界面,使用标签多文档界面和停靠栏。 双击.bdc文件,会启动windows脚本调试器。 附带使用手册和批处理指南。 准备实现的功能: 在断点命中时修改环境变量或者当前目录; 语法分析【代码着色、语法检查的基础】; 语法检查; 代码着色; 内置命令帮助; 不打算实现的功能: 我感觉批处理编程并不能提供多少智能提示,所以就不做了。 局限性: 代码编辑器暂时不支持中文,这个是最大的限制了,我会在下个版本解决这个问题; 只可以在批处理语句之前加断点,不可以在空行、标签行和右括号)开头的行加断点,不可以在非批处理代码处加断点; 不支持单步调试; 必须在调试之前加断点,在调试之后加的断点,只能在以后的调试会话中起作用。 启动批处理脚本只能接受10个参数,这个限制好像问题不大。 目前可能还有bug。 注意: 不要调试本程序所在目录下的那三个批处理程序,否则会出现无法预料的行为。为了保险,请把他们设为只读隐藏文件。 可以把halt.exe也设为只读隐藏文件。 我会持续改进本程序。 email: cdp97531@sina.com blog: http://hi.baidu.com/chendeping/home
CC Debugger是一种用于调试和编程Texas Instruments (TI)系列Chipcon无线芯片的工具。在使用CC Debugger之前,我们需要确保计算机上安装了相应的驱动程序。对于Windows 10操作系统,以下是CC Debugger驱动程序的安装过程。 首先,我们需要找到CC Debugger驱动程序的安装文件。可以从TI官方网站或其他可信来源下载安装文件。确保下载最新版本的驱动程序以保持兼容性和稳定性。 接下来,我们双击驱动程序的安装文件,开始安装过程。在安装过程中,可能会提示用户接受许可协议和选择安装位置。请按照提示进行操作,并确保选择正确的安装位置。 一旦安装完成,我们需要将CC Debugger连接到计算机。首先,将CC Debugger的USB接口插入计算机的可用USB端口。系统会自动检测新的硬件连接并尝试安装相应的驱动程序。 如果系统无法自动安装驱动程序,则需要手动安装。我们可以打开Windows设备管理器,找到列表中的未知设备或其它相关设备,右键点击并选择“更新驱动程序”。然后选择“浏览计算机以查找驱动程序软件”,并浏览到先前安装驱动程序的位置,选择适用于CC Debugger的驱动程序文件。 完成以上步骤后,系统会将CC Debugger识别为有效设备并安装相应的驱动程序。这样,我们就成功地将CC DebuggerWindows 10操作系统连接起来,并可以开始使用它进行调试和编程无线芯片的工作了。 总的来说,CC DebuggerWindows 10操作系统上的驱动程序安装过程相对简单。只需几个步骤即可完成安装,确保计算机与CC Debugger的连接正常工作。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值