程序调试器原理

调试器是一个能够操纵内核数据以控制被调试进程的程序。它通过系统调用劫持来实现对目标进程的控制,利用内核中断处理程序进行单步调试或设置断点。在用户态,调试器通过操作系统对目标进程的内存和寄存器进行读写。源代码调试依赖于调试信息和符号表,使得调试器能解释内存数据的意义并进行对象解析。内核调试则更为复杂,涉及对目标进程内存和寄存器的直接操作,以及通过结构体解析内存内容。
摘要由CSDN通过智能技术生成

调试器原理:

 

   调试器是一个程序,在开发工具中也是调用一个程序,在运行时就是一个进程,这个进程与普通进程没有区别,只是这个进程调用了内核的一些特殊函数(系统调用)来操纵内核数据,这些数据就是被调试进程的内存数据。

 

而对操作系统调试的调试器则不同,因为没有操作系统的支持,调试器本身就不再需要调用操作系统内核的程序来支持,但是此时的调试非常特殊,因为操作系统自己有中断处理程序,调试器对中断服务程序的劫持会让操作系统的操作变得有些不同,调试器首先启动先设置CPU为单步执行状态,然后启动操作系统的代码,每执行一条指令,CPU均产生中断进入调试器程序(中断服务程序)。

通常内核调试紧紧是通过输出信息(如printk)来调试,这其实已经不是调试,而是嵌入代码进行测试,即使是kgdb也是在内核中插入了代码来实现调试,如让windows运行时启动调试模式,那么其内核中的调试代码就起作用了,这些调试是内核设计者预先设计好的。

 

在操作系统下调试程序,只是调试用户态代码,而用户态代码是出于操作系统控制之下的,因此调试就是借助操作系统来操作目标进程。

  无论windows还是unix中,都是通过对系统调用的劫持来实现对目标程序的调试的,如果操作系统内核不实现对程序的调试功能,那么调试器是不可能实现对另一个进程控制的。调试器通过创建子进程,并告诉操作系统(创建进程的状态设置)自己要对子进程进行调试,那么操作系统装载目标程序时,如果发生了规定的事件,就会停止目标进程的执行,此时对于目标进程来说&

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值