[发明专利]一种热点模块指令跟踪的方法及设备有效
申请号: | 201510444041.4 | 申请日: | 2015-07-27 |
公开(公告)号: | CN105095079B | 公开(公告)日: | 2018-01-12 |
发明(设计)人: | 张小松;王东;许云清;牛伟纳;陈瑞东;朱迦南;白金;俞工淳 | 申请(专利权)人: | 电子科技大学 |
主分类号: | G06F11/36 | 分类号: | G06F11/36 |
代理公司: | 电子科技大学专利中心51203 | 代理人: | 李明光 |
地址: | 611731 四川省成*** | 国省代码: | 四川;51 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 热点 模块 指令 跟踪 方法 设备 | ||
技术领域
本发明属于软件分析技术领域,具体一种针对热点模块进行指令跟踪的方法,其被指定的热点模块可以是用户自己指定的文件所在的内存页。
背景技术
调试器是自从计算机诞生时就存在的,初期的调试器都是基于硬件直接实现的,调试器的工作原理是基于中央处理器的异常机制,并由操作系统的异常分发/事件分发的子系统(或模块)负责将其封装处理后,以比较友好的方式与调试器进行实时交互,调试是软件维护与错误修正的一个最重要、最直接,也是必不可少的一种机制。
调试器最基本的功能包括控制软件运行,查看软件运行中信息,修改软件执行流程。控制软件运行就是指,将一个飞速运行的程序中断下来,并且使其按照用户的意愿执行,调试器是靠迫使目标程序触发一个精心构造的异常来完成这些工作的;查看软件运行中信息,这些信息包含但不限于当前线程的寄存器信息,堆栈信息,内存信息,当前EIP附近的反汇编信息等;修改软件执行流程包括修改内存信息、反汇编信息、堆栈信息、寄存器信息等。
普通的调试器无法对指定的内存页进行全指令追踪,单步跟踪可以较好的跟踪线程指令,但仍然无法处理系统回调触发的指令执行,单步跟踪的性能开销同时也是非常大;断点跟踪可以较好的解决性能开销,但是断点的设置开销非常大,并且同样无法处理系统回调触发的指令执行,因此断点跟踪往往只用有限数量指令的跟踪。
发明内容
针对上述现有技术问题,本发明的目的在于提供一种针对热点模块进行指令追踪的方法,该方法能够动态的分析进程所访问的内存页,对被调试进程进行有效追踪查看,并有效检测恶意代码对内存页的访问,同时在指令跟踪的完备性和性能开销上都有良好的表现。
为了达到上述目的,本发明采用如下技术方案:
一种热点模块指令追踪的方法,其流程如图1所示,主要包括以下步骤:
步骤1.标识感兴趣的页:用户根据需要标记感兴趣的文件为热点模块,将热点模块所在代码页记为感兴趣的页并设置为PAGE_GUARD属性,标识并记录这些代码页的PAGE_GUARD属性,执行步骤2;
步骤2.被调试进程在运行时可能触发异常,其中,由于感兴趣的页已经被设置PAGE_GUARD属性,若被调试进程的某一线程访问到标识为感兴趣的内存页,则会触发异常;主程序接收到触发的异常后,对被调试进程进行挂起处理,执行步骤3;
步骤3.处理PAGE_GUARD异常:异常处理进程接受到被调试进程发送的异常事件后对异常进行判定及处理,处理后将被调试进程唤起,执行步骤4;
步骤4.一旦发现步骤3中线程所触发的异常为PAGE_GUARD异常,则被调试进程唤起后,把该线程所访问的包含有该内存页PAGE_GUARD属性及其位置的信息写入一个链表中,此时该内存页的PAGE_GUARD属性丢失,并将被调试进程的所有线程设置为单步调试即一步一步的执行指令,执行步骤5;
步骤5.当单步执行下个线程的指令后将触发单步异常,单步执行进程进行异常处理,当前线程的单步标示位丢失,该线程不再单步;判断该线程下条指令所访问内存页位置是否处于所设定感兴趣的页,如果处于感兴趣的页,并且该页具有PAGE_GUARD属性则重新执行步骤4,若该页没有PAGE_GUARD属性就使该线程继续单步;如果线程未访问感兴趣的页,则该线程不再单步,并针对此前已丢失PAGE_GUARD属性的内存页根据步骤4所述链表重设其PAGE_GUARD属性并重新执行步骤2;
步骤6.按照上述方法,即可实现进程在调试过程中热点模块是否被访问及访问频率的实时跟踪。
本发明还提供一种实现上述指令追踪方法的装置,其结构如图2所示,包括调试循环模块,异常处理模块,读取寄存器及内存模块,断点功能模块,单步执行模块;
调试循环模块:一个进程成为被调试进程之后,在完成了某些操作或者发生异常时,它会发送通知给调试器,然后将自身挂起,直到调试器命令它继续执行;
异常处理模块:通过异常的分发,对不同的异常事件进行处理,异常处理分离了接收和处理错误代码,是编程语言或计算机硬件里的一种机制,用于处理软件或信息系统中出现的异常状况(即超出程序正常执行流程的某些特殊条件);
读取寄存器及内存模块:线程都有一个上下文环境,它包含了有关线程的大部分信息,例如线程栈的地址,线程当前正在执行的指令地址等;上下文环境保存在寄存器中,系统进行线程调度的时候会发生上下文切换,实际上就是将一个线程的上下文环境保存到内存中,然后将另一个线程的上下文环境装入寄存器;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于电子科技大学,未经电子科技大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201510444041.4/2.html,转载请声明来源钻瓜专利网。