zoukankan      html  css  js  c++  java
  • 关于普通断点/内存断点/硬件断点

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

    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处断下。

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

  • 相关阅读:
    什么是马甲APP?怎么用马甲APP导流
    OC与JS交互前言-b
    UIWebView1-b
    Mac双系统切换
    iOS之手势滑动返回功能
    Duplicate Symbol链接错的原因总结和解决方法-b
    #ifndef#define#endif的用法-b
    iOS Copy 和 MutableCopy的区别 深浅拷贝的区别-供参考
    解决CocoaPods在OS X 10.11出现问题-b
    django中cookies和session
  • 原文地址:https://www.cnblogs.com/aaaguai/p/12769808.html
Copyright © 2011-2022 走看看