• 关于普通断点/内存断点/硬件断点


    断点都是通过触发程序异常,来达到使程序断下的目的

    1.普通断点:常规的有使用int 3,还有调试器平时的断点,这2种都为该类型断点,通过执行int 3达到触发异常,让程序断下的目的。但该断点修改了代码段,在反调试中容易被察觉。

    2.条件断点:在普通断点的基础上,增加限定条件。适用于某一下断处会被多地方调用,则加上限定条件(例:[esp-4]!=某一地址),以达到真正需要断下时触发。

    3.内存断点:通过修改内存的属性来达到触发异常。可设置触发条件为读、写、执行。但该断点会消耗较大资源,因为内存断点会将目标地址所在的一整个内存页中下断点,当同内存页非下断位置被读、写、访问也会触发,此时调试器会对比数据,看触发的断点位置是否为当初下断处。虽然内存断点的效率经常很不理想,但是因为仅仅是修改了一个内存属性,所以内存断点可以下数量非常多、单断点范围非常大。这是它的优势。

    4.硬件断点:硬件断点为CPU提供给我们的断点,由4个寄存器(DR0-DR3)存放断点地址,断点属性可设置为读、写、执行,由于寄存器数量有限,只能存在4个硬件断点,这4个断点是否执行由DR70246位决定,当置为1时,断点生效。

    读:当被下断位置执行读取操作后,在执行这个操作的位置断下。 例:a的地址为0x123;在123下读的断点后,0x456 if(a==1),则程序会在0x456处断下。

    写:当被下断位置执行写操作后,在执行这个操作的位置断下。例:a的地址为0x123;在123下写的断点后,0x456 a=1,则程序会在0x456处断下。

    执行:当运行到下断位置时,在该位置断下。 例:例如0x123456处的代码为c=a+b;在执行到这句时,会在0x123456处断下。

    以上断点的地址都在内存中,不能为寄存器。

  • 相关阅读:
    HTML5的页面资源预加载技术(Link prefetch)加速页面加载
    正则表达式入门教程
    SQL 查询分析器操作(修改、添加、删除)表及字段等
    linux终端相关概念解释及描述
    linux系统编程--守护进程,会话,进程组,终端
    linux系统编程--信号
    linux系统编程--进程间通信
    linux系统编程--进程
    Python GUI编程(Tkinter)(一)
    C++中时间转换
  • 原文地址:https://www.cnblogs.com/aaaguai/p/12769808.html
Copyright © 2020-2023  润新知