设为首页 收藏本站
查看: 945|回复: 0

[经验分享] 《python灰帽子》之调试器中的断点

[复制链接]

尚未签到

发表于 2015-12-15 13:30:42 | 显示全部楼层 |阅读模式
在调试程序时,通过设置断点我们可以使一个进程的执行暂停在一个符合某种特定条件的位置上。一般情况下,调试器会提供三种基本类型的断点:   软断点、硬件断点、内存断点
  软断点
  目前在调试应用程序时最常用的断点类型。软断点的实质只是一个单字节长的指令,该指令可以使被调试的目标进程暂停执行并将控制权转交给调试器的异常处理例程。实际处理过程是将指令的操作码的第一个字节存放在断点列表中,然后用INT3中断指令的操作码0xCC填充该地方;当CPU试图执行操作码CC时,将触发一个端点事件,或被我们成为INT3事件;接着调试器将检查指令指针是否正指向一个此前被我们设置了断点的内存地址,如果这个地址在调试器内部的断点列表中被查到,那么调试器则会将之前存储的字节数据写回此内存地址中,这样,当此进程恢复执行后,正确的指令操作码将被执行。
  假设指令 mov EAX, EBX位于内存地址0x44332211中,操作码为0x8BC3
  0x44332211: 8BC3 mov EAX, EBX
  设置软断点之后:
  0x44332211: CCC3 mov EAX, EBX
  软断点的执行流程图

DSC0000.gif   
  软断点的使用改变了内存中的可执行代码,实际上同时也就改变了运行程序的循环冗余校验值(CRC)。CRC校验算法是一种非常非常非常严格的算法,可以检测出程序是否被改动过,即使是一个字节的改变,这种算法可被用于检查文件、内存、文本、网络封包或者任何需要监控数据篡改的场合。软断点会引起CRC校验失败。
  硬件断点
  硬件断点的设置是通过位于CPU上的一组特殊的寄存器(DR0~DR7)(都是32位)来实现的。硬件断点使用INT1中断。
  DR0~DR3:存放硬件断点的内存地址,故最多可设置四个硬件断点。
  DR4~DR5:保留
  DR6:调试状态寄存器,记录上次断点触发的事件类型信息。
  DR7:硬件断点的开关以及各个端点的触发条件信息。
  DR7寄存器的布局图:
DSC0001.jpg


0~7位的L和G对应的是局部断点和全局断点,只要两个域均设置为1,就可以使断点工作。 16~31位决定了有关调试寄存器上所设断点的类型和长度。
断点类型(Type): 00--执行断点;01--数据写入断点;11--数据读写(但非执行)断点
断点长度(Len):00--1字节;01--2字节;11--四字节
IR7和一个设置与0x55667788上的双字节数据读写断点
   DR1 DSC0002.gif

内存断点   本质上不是真正的断点。当一个调试器设置一个内存断点时,调试器实质上所做的是改变一个内存区域或一个内存页的访问权限。
  内存页访问权限中有种保护页,对保护页的任何类型的访问将导致一次性异常,之后这个内存页会恢复到之前的状态。利用该特性,当进程访问一个特定区域内的内容时,我们让进程暂停执行。



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-151565-1-1.html 上篇帖子: 《Python灰帽子》之构建自己的windows调试器1--加载进程 下篇帖子: Python中的ctypes库
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表