CN105095079B - 一种热点模块指令跟踪的方法及设备 - Google Patents
一种热点模块指令跟踪的方法及设备 Download PDFInfo
- Publication number
- CN105095079B CN105095079B CN201510444041.4A CN201510444041A CN105095079B CN 105095079 B CN105095079 B CN 105095079B CN 201510444041 A CN201510444041 A CN 201510444041A CN 105095079 B CN105095079 B CN 105095079B
- Authority
- CN
- China
- Prior art keywords
- page
- guard
- thread
- module
- debugged
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种热点模块指令跟踪的方法及设备,属于软件分析技术领域。本发明提供的方法首先标记用户感兴趣的页,当线程访问热点模块将触发PAGE_GUARD异常,触发调试器进行处理;然后调试器设置所有线程单步调试,并把该页页号加入恢复链表,触发PAGE_GUARD异常的页会自动丢失PAGE_GUARD属性,最后在当前执行线程中分析执行指令所在地址是否位于感兴趣的页进行相应操作。该发明使用PAGE_GUARD属性标识热点模块和有限单步调试来跟踪模块指令执行,实现了热点模块指令跟踪的完备性,避免了单纯断点跟踪的非完备性问题和复杂性问题,也避免了单纯指令跟踪的效率低下问题。
Description
技术领域
本发明属于软件分析技术领域,具体一种针对热点模块进行指令跟踪的方法,其被指定的热点模块可以是用户自己指定的文件所在的内存页。
背景技术
调试器是自从计算机诞生时就存在的,初期的调试器都是基于硬件直接实现的,调试器的工作原理是基于中央处理器的异常机制,并由操作系统的异常分发\事件分发的子系统(或模块)负责将其封装处理后,以比较友好的方式与调试器进行实时交互,调试是软件维护与错误修正的一个最重要、最直接,也是必不可少的一种机制。
调试器最基本的功能包括控制软件运行,查看软件运行中信息,修改软件执行流程。控制软件运行就是指,将一个飞速运行的程序中断下来,并且使其按照用户的意愿执行,调试器是靠迫使目标程序触发一个精心构造的异常来完成这些工作的;查看软件运行中信息,这些信息包含但不限于当前线程的寄存器信息,堆栈信息,内存信息,当前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所示,包括调试循环模块,异常处理模块,读取寄存器及内存模块,断点功能模块,单步执行模块;
调试循环模块:一个进程成为被调试进程之后,在完成了某些操作或者发生异常时,它会发送通知给调试器,然后将自身挂起,直到调试器命令它继续执行;
异常处理模块:通过异常的分发,对不同的异常事件进行处理,异常处理分离了接收和处理错误代码,是编程语言或计算机硬件里的一种机制,用于处理软件或信息系统中出现的异常状况(即超出程序正常执行流程的某些特殊条件);
读取寄存器及内存模块:线程都有一个上下文环境,它包含了有关线程的大部分信息,例如线程栈的地址,线程当前正在执行的指令地址等;上下文环境保存在寄存器中,系统进行线程调度的时候会发生上下文切换,实际上就是将一个线程的上下文环境保存到内存中,然后将另一个线程的上下文环境装入寄存器;
断点功能模块:在进行调试的时候,只有被调试进程暂停执行时调试器才可以对它执行操作,例如观察内存内容等;如果被调试进程不停下来的话,调试器是什么也做不了的;要使被调试进程停下来,除了几个在特定时刻才发生的调试事件外,唯一的途径就是引发异常,断点就是达到以上目的的异常;
单步执行模块:单步执行是最常见的调试手段之一,即每次执行一个指令,它也包括逐语句、逐过程、跳出三种命令;
通过使用Windows API函数CreateProcess启动被调试程序,通过调试循环模块,调试程序循环等待被调试程序触发异常事件;所述异常处理模块对异常事件进行分发处理;通过读取寄存器和内存这一模块,得到被调试进程访问页的位置信息,判断是否访问到感兴趣的内存页,如果访问的是热点模块,则触发PAGE_GUARD异常;通过异常处理模块处理PAGE_GUARD异常并将被调试进程唤起,被调试进程的所有线程通过单步执行模块被设置为单步调试,一条一条的执行指令。
单步调试模块还具有以下功能:在单步调试过程中,若当前指令访问感兴趣的内存页即产生PAGE_GUARD异常,唤起进程后继续按单步调式方式执行指令;若当前指令出现非PAGE_GUARD异常并唤醒进程后或未出现任何异常,则利用所述链表记录的信息,将此前已丢失PAGE_GUARD属性的内存页重新设置相应的PAGE_GUARD属性,并取消当前指令对应线程的单步调试方式;而断点功能模块可以在主程序进行调试时根据实际需要暂停程序执行,使得调试过程更灵活。
本发明同现有技术相比,其有益效果表现在:
一、使用PAGE_GUARD属性实时监控内存页,针对性强,确保了每条进入感兴趣页面的线程指令都能被探测到;
二、当触发PAGE_GUARD异常以后将对被调试进程的线程进行单步调试,所有线程将进行临时的单步运行,确保了多线程环境下指令跟踪的完备性;
三、对热点模块百分之百跟踪,对非热点模块几乎不跟踪,性能开销低,可用于大型程序的分析;
附图说明
图1是本发明提供的热点模块指令追踪的方法流程图。
图2为本发明提供的热点模块指令追踪的装置结构示意图。
具体实施方式
下面将结合附图及具体实施方式对本发明作进一步的描述。
实施例
具体实施是基于微软公司的Windows7系统。
将开发的基于热点模块追踪的调试器在Windows7系统下进行调试,使用visualstdio2013对项目进行编译运行。调试器项目可以指定一个exe执行文件,并选定可能被恶意攻击的内存页标识为PAGE_GUARD属性,随后调试器生成一个进程,指定为被调试的进程,一旦被调试的进程对热点模块进行了读写就会触发PAGE_GUARD异常。而被调试的进程在它的生命周期将要触发的异常有很多,根据调试器进程接受到被调试进程发送的异常事件对异常进行处理,就完成了一个调试流程,表1列出了被调试器可能会触发的异常事件。
表1本实施方式可能触发的异常
本具体实施方式采用如下技术方案:
一种热点模块指令追踪的方法,其流程如图1所示,主要包括以下步骤:
一、调试事件与调试循环:要想对一个程序进行调试,首先要做的当然是启动这个程序,这要使用CreateProcess这个Windows API来完成,调试循环保证了调试器进程能准确接收被调试进程发来的异常,其步骤如下:
①通过CreateProcess函数创建一个进程;
②被创建的进程被启动,触发异常;
③被创建的进程通知调试器,要求异常处理;
④调试器进程挂起被创建进程,并对异常进行处理;
⑤异常处理完成,恢复被创建进程的运行;
二、PAGE_GUARD异常事件流程:
a、根据代码区以及数据存储区等信息,标识内存相关区域属性为PAGE_GUARD,一旦被创建的进程的线程读或写该内存区域,就将导致PAGE_GUARD异常,通过调试循环将异常信息传给调试器;
b、调试器获得PAGE_GUARD异常信息,设置被调试进程的所有线程单步调试,并将页号加到一个链表中,页的PAGE_GUARD属性丢失;
c、另一个线程运行,判断该线程是否访问感兴趣的内存页,如果是,且该页具有PAGE_GUARD属性则转到b,若该页不具有PAGE_GUARD属性,则只继续该线程单步调试,若不是,则转到d;
d、不监控未访问感兴趣页面的线程,由于在b步骤时,被检测的内存页的PAGE_GUARD属性丢失,将根据b链表重新标识热点模块的PAGE_GUARD属性;
本实施方式提出的使用PAGE_GUARD属性标识热点模块的方式有效且简单,能够预防恶意程序代码对敏感内存位置的访问。例如,当调试器对一个程序进行分析时,如果这个程序访问了我们标记的热点区域,那么就只能进行单步调试,这将使得恶意代码不被执行,而以往的调试器只能通过程序员自己分析被调试进程所访问的内存页是否过于敏感,是否受到被攻击。通过对敏感区域的PAGE_GUARD标识,减少了人工判断的部分工作,增加了调试器对恶意代码的检测效率。
以上仅是本发明众多具体应用范围中的代表性实施例,对本发明的保护范围不构成任何限制。凡采用变换或是等效替换而形成的技术方案,均落在本发明权利保护范围之内。
Claims (2)
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.一种实现如权利要求1所述的热点模块指令追踪方法的装置,其特征在于,包括调试循环模块,异常处理模块,读取寄存器及内存模块,断点功能模块,单步执行模块;
调试循环模块的作用:一个进程成为被调试进程之后,在完成了某些操作或者发生异常时,它会发送通知给调试器,然后将自身挂起,直到调试器唤醒即命令它继续执行;
异常处理模块的作用:通过异常的分发,对不同的异常事件进行处理,用于处理软件或信息系统中出现的异常状况;
读取寄存器及内存模块的作用:每一个线程都有一个上下文环境,其包含了有关线程的大部分信息;上下文环境保存在寄存器中,系统进行线程调度的时候会发生上下文切换,即将一个线程的上下文环境保存到内存中,将另一个线程的上下文环境装入寄存器;
断点功能模块:在进行调试的时候,通过控制断点功能模块引发异常使得被调试进程暂停执行,便于调试器执行操作;
单步执行模块的作用:单步执行是最常见的调试手段之一,即每次执行一个指令;
通过使用Windows API函数CreateProcess启动被调试程序,通过调试循环模块,调试程序循环等待被调试程序触发异常事件;所述异常处理模块对异常事件进行分发处理;通过读取寄存器及内存模块,得到被调试进程访问页的位置信息,判断是否访问到感兴趣的内存页,如果访问的是热点模块,则触发PAGE_GUARD异常;通过异常处理模块处理PAGE_GUARD异常并将被调试进程唤起;被调试进程的所有线程通过单步执行模块被设置为单步调试,一条一条的执行指令;
单步执行模块还具有以下功能:在单步调试过程中,若当前指令访问感兴趣的内存页即产生PAGE_GUARD异常,唤起进程后继续按单步调式方式执行指令;若当前指令出现非PAGE_GUARD异常并唤醒进程后或未出现任何异常,则利用所述链表记录的信息,将此前已丢失PAGE_GUARD属性的内存页重新设置相应的PAGE_GUARD属性,并取消当前指令对应线程的单步调试方式;
断点功能模块还具有以下功能:在主程序进行调试时暂停程序执行。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510444041.4A CN105095079B (zh) | 2015-07-27 | 2015-07-27 | 一种热点模块指令跟踪的方法及设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510444041.4A CN105095079B (zh) | 2015-07-27 | 2015-07-27 | 一种热点模块指令跟踪的方法及设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105095079A CN105095079A (zh) | 2015-11-25 |
CN105095079B true CN105095079B (zh) | 2018-01-12 |
Family
ID=54575574
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510444041.4A Expired - Fee Related CN105095079B (zh) | 2015-07-27 | 2015-07-27 | 一种热点模块指令跟踪的方法及设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105095079B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105718374A (zh) * | 2016-01-26 | 2016-06-29 | 国家信息技术安全研究中心 | 一种热点模块指令跟踪的方法及系统 |
CN108959058B (zh) * | 2017-05-18 | 2020-07-28 | 南京南瑞继保电气有限公司 | 一种虚拟控制器的组态调试器实现方法 |
CN109101355B (zh) * | 2018-06-26 | 2021-12-10 | 飞腾信息技术有限公司 | 一种提取错误现场特征测试激励的处理器调试方法 |
CN110489294B (zh) * | 2019-08-23 | 2023-12-19 | 上海光电医用电子仪器有限公司 | 一种基于日志实时单步调试方法和装置 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100461132C (zh) * | 2007-03-02 | 2009-02-11 | 北京邮电大学 | 基于源代码静态分析的软件安全代码分析器及其检测方法 |
CN101221503A (zh) * | 2008-02-01 | 2008-07-16 | 中国建设银行股份有限公司 | 软件测试方法及装置 |
US8261242B2 (en) * | 2008-06-09 | 2012-09-04 | International Business Machines Corporation | Assisting debug memory tracing using an instruction array that tracks the addresses of instructions modifying user specified objects |
-
2015
- 2015-07-27 CN CN201510444041.4A patent/CN105095079B/zh not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
CN105095079A (zh) | 2015-11-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105718374A (zh) | 一种热点模块指令跟踪的方法及系统 | |
CN102346708B (zh) | 一种调试器及其调试方法 | |
CN102214137B (zh) | 调试方法和调试设备 | |
KR101519845B1 (ko) | 안티디버깅 방법 | |
CN105095079B (zh) | 一种热点模块指令跟踪的方法及设备 | |
JP5905904B2 (ja) | デバッグ例外生成の制御 | |
JP5905911B2 (ja) | シングルステップ実行を用いる診断コード | |
CN109086193B (zh) | 监控方法、装置及系统 | |
CN101446918B (zh) | 一种实现用户态调试器调试单个函数的方法及系统 | |
CN104205064A (zh) | 将程序事件记录事件向运行时间检测事件的变换 | |
JP2007128132A (ja) | スレッドデバッグ装置、スレッドデバッグ方法及びプログラム | |
CN101154184A (zh) | 一种微控制器jtag调试方法 | |
CN108549591A (zh) | 一种嵌入式系统的黑匣子装置及其实现方法 | |
CN104380264A (zh) | 运行时间检测报告 | |
CN104364769A (zh) | 处理器特性的运行时间检测监控 | |
CN100388234C (zh) | 一种基于有限状态机的对内存变量改写进行监控的方法 | |
TWI515597B (zh) | 安全保護方法和處理器 | |
CN107003897B (zh) | 监控事务处理资源的利用率 | |
Zhang et al. | A lightweight system for detecting and tolerating concurrency bugs | |
CN102331961B (zh) | 并行模拟多个处理器的方法及系统、调度器 | |
CN102866951B (zh) | 嵌入式系统内存越界错误快速定位方法 | |
CN102662845B (zh) | 一种实现经过性数据断点的方法、装置及系统 | |
US9195524B1 (en) | Hardware support for performance analysis | |
CN102486758B (zh) | 一种访问协处理器寄存器的方法及装置 | |
CN106528414A (zh) | 处理器芯片仿真器 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20180112 Termination date: 20200727 |
|
CF01 | Termination of patent right due to non-payment of annual fee |