调试器——原理篇

在本文中将介绍基于软断点的调试器的工作原理。本人是做Java开发的,由于对Python在安全方面感兴趣,特意对Python在构建调试器方面进行了研究与探索。

下面介绍的调试器原理是通用的。一般的调试器会提供三种类型的断点:软断点、硬件断点和内存断点。我重点对基于软断点的调试原理进行了研究。软断点是在调试应用程序时最为常用的断点。

软断点的实现是基于单字长指令的,该指令能中断进程的执行,并产生中断事件,该事件会被调试器捕获并处理。具体来说,若有一个汇编指令:

mov EAX, EBX

该指令在内存中的表示方式如下:

0X637666666  8BC4  MOV EAX, EBX

0X637666666是指令的地址,8BC4  是指令的操作码(双字节),MOV EAX, EBX是汇编指令。

若在此地址处设置了一个软断点,当CPU执行到此处时将停止执行。软断点的设置实质上是操作码的替换!!

在本例子中将会把双字节的操作码8BC4中的一个字节替换,如替换为CCC4。即设置软断点后内存状态如下:

0X637666666  CCC4  MOV EAX, EBX


软断点的设置流程如下图所示:


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值