zoukankan      html  css  js  c++  java
  • 学习:内存断点

    内存断点原理:OD会对所设置地址设置为不可访问或者不可写属性,这样当程序试图访问或者写入时就会产生异常,OD在截获这种异常后比较地址是否是设置的断点地址,这种方式会对程序的运行速度有很大的影响,所以只允许设置一个内存断点,但是在找到内存断点后可以使用一般的断点(这个是可以设置无数个的)进行调试。


    内存断点的实现:

    00401007 |. A3 CA204000 mov dword ptr ds:[0x4020CA],eax

    对以上中的0x4020CA内存地址进行内存断点,右键数据窗口中跟随->内存地址,然后在内存数据进行设置内存断点

    然后运行程序,发现程序会在00401007地址进行断点,如以下图

    原因:OD会对所设置地址设置为不可访问或者不可写属性,这样当程序试图访问或者写入时就会产生异常,OD在截获这种异常后比较地址是否是设置的断点地址


    取消内存断点

    第一种方法:在原来设置的地方进行删除内存断点
    第二种方法:随便找一个设置内存断点,然后再删除内存断点


    针对单一DLL进行内存断点进行调试的方法

    ALT+M打开内存窗口,比如要对调用了user32.dll中的内容进行调试,可以对user32.dll的代码段设置内存断点,然后再运行程序F9,它会在77D11000,大小为00060000 (393216.)中进行监视,当访问或写入了就直接捕获异常,然后堆栈窗口跟随窗口反汇编到程序领空,效果如下


    DLL内存断点快速返回程序领空的两种方法:

    第一种:ALT+M 打开内存窗口,比如要对调用了user32.dll中的内容进行调试,可以对user32.dll的代码段设置内存断点,然后运行程序,会来到user32.DLL的领空然后在堆栈窗口进行窗口反汇编跟随,在当前的地方进行设置断点,然后在内存窗口把之前设置的内存断点删除,再运行程序F9,就来到了程序的领空

    第二种:*ALT+M 打开内存窗口,比如要对调用了user32.dll中的内容进行调试,可以对user32.dll的代码段设置内存断点,然后运行程序,会来到user32.DLL的领空,然后在内存窗口把之前设置的内存断点删除,再使用ALT +F9 快捷键(执行到用户代码)

  • 相关阅读:
    SPOJ 10628 求树上的某条路径上第k小的点
    zoj 2112 动态区间求第k大
    SPOJ QTREE 树链剖分
    FZU 2082 过路费
    bzoj 1036 Tree Count
    POJ 3237
    C
    G
    E
    B. Split a Number(字符串加法)
  • 原文地址:https://www.cnblogs.com/zpchcbd/p/12057304.html
Copyright © 2011-2022 走看看