CN102214137A - 调试方法和调试设备 - Google Patents

调试方法和调试设备 Download PDF

Info

Publication number
CN102214137A
CN102214137A CN2010101420810A CN201010142081A CN102214137A CN 102214137 A CN102214137 A CN 102214137A CN 2010101420810 A CN2010101420810 A CN 2010101420810A CN 201010142081 A CN201010142081 A CN 201010142081A CN 102214137 A CN102214137 A CN 102214137A
Authority
CN
China
Prior art keywords
target program
buffer zone
module
page
judge
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.)
Granted
Application number
CN2010101420810A
Other languages
English (en)
Other versions
CN102214137B (zh
Inventor
李毅超
刘丹
陈沁源
刘泽鹏
仇冰雪
张大成
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shenzhen Zhitong World Technology Service Co. Ltd.
Original Assignee
Huawei Technologies Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to CN201010142081.0A priority Critical patent/CN102214137B/zh
Priority to PCT/CN2010/079643 priority patent/WO2011124076A1/zh
Publication of CN102214137A publication Critical patent/CN102214137A/zh
Priority to US13/647,190 priority patent/US20130036331A1/en
Application granted granted Critical
Publication of CN102214137B publication Critical patent/CN102214137B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明实施例公开了一种调试方法,包括:将系统处理器的中断描述符表中,页面属性故障对应的故障处理函数地址,修改为自定义故障处理函数地址;当目标程序出现指定的页面属性故障时,获取现场信息;将该现场信息保存到当前线程对应的虚拟执行缓冲区;将该缓冲区中的现场信息压栈保存;判断目标程序扩展指令指针是否与故障页面的预置断点地址匹配;若匹配,则与用户交互;否则拷贝构造目标程序扩展指令指针所指向指令到当前线程对应的虚拟执行缓冲区;从栈中弹出现场信息,执行该缓冲区中的指令,并重复判断地址是否与预置断点地址匹配。本发明实施例还提供相应的调试设备,具有隐蔽性较高的优点。

Description

调试方法和调试设备
技术领域
本发明涉及计算机技术领域,具体涉及一种调试方法和调试设备。
背景技术
调试技术被广泛运用于代码分析、逆向工程领域、恶意代码分析领域。对软件进行调试,包含以下几个方面的内容:一是对目标程序执行路径下断点,并使之能在执行时停下来;二是能对目标程序进行单步跟踪;三是能够提供目标程序运行时的丰富信息。
在对现有技术的研究和实践过程中,本发明的发明人发现,目前较常用的调试方法是通过修改目标程序代码来实现断点机制,容易被反调试技术发现被修改的代码并恢复目标程序,因此现有的调试方法隐蔽性较差。
发明内容
本发明实施例提供一种调试方法和调试设备,能够在不修改目标程序代码的情况下对目标程序进行调试,隐蔽性较高。
本发明实施例提供了一种调试方法,包括:
将系统处理器的中断描述符表中,页面属性故障对应的故障处理函数地址,修改为自定义故障处理函数地址;
当目标程序出现指定的页面属性故障时,获取目标程序的现场信息;
将获取的现场信息保存到当前线程对应的虚拟执行缓冲区;
将所述虚拟执行缓冲区中的现场信息压栈保存;
判断目标程序扩展指令指针是否与出现故障的页面的预置断点地址匹配;
若匹配,则与用户交互;
否则拷贝构造目标程序扩展指令指针所指向指令到当前线程对应的虚拟执行缓冲区;
从栈中弹出现场信息,执行所述虚拟执行缓冲区中的指令,并重复判断目标程序扩展指令指针是否与预置断点地址匹配。
本发明实施例还提供了一种调试设备,包括:
第一修改模块,用于将系统处理器的中断描述符表中,页面属性故障对应的故障处理函数地址,修改为自定义故障处理函数地址;
获取模块,用于当目标程序出现指定的页面属性故障时,获取目标程序的现场信息;
第一保存模块,用于将获取的现场信息保存到当前线程对应的虚拟执行缓冲区;
第二保存模块,用于将当前线程对应的虚拟执行缓冲区中的现场信息压栈保存;
第一判断模块,用于判断目标程序扩展指令指针是否与出现故障的页面的预置断点地址匹配,若匹配,则触发交互模块执行相关操作,否则触发拷贝模块执行相关操作;
交互模块,用于与用户交互;
拷贝模块,用于拷贝构造目标程序扩展指令指针所指向指令到虚拟执行缓冲区;
执行模块,用于从栈中弹出现场信息,执行虚拟执行缓冲区中的指令,并触发第一判断模块执行相关操作。
从以上技术方案可以看出,本发明实施例具有如下有益效果:
本发明实施例中,通过修改页面属性故障对应的故障处理函数地址,使得在目标程序出现页面属性故障时,调试设备能够截获对目标程序的控制权,在截获控制权后,调试设备将现场信息保存到当前线程对应的缓冲区并压栈保存,再对目标程序的指令拷贝构造并执行,使目标程序运行到预置断点位置,与用户交互,让用户对目标程序进行调试,从而实现在不修改目标程序代码的情况下对目标程序进行调试,隐蔽性较高。
附图说明
图1是本发明实施例中调试方法的一个实施例的示意图;
图2是本发明实施例中调试方法的另一实施例的示意图;
图3是本发明实施例中调试方法的另一实施例的多处理器流程示意图;
图4是本发明实施例中调试方法的另一实施例的多线程流程示意图;
图5是本发明实施例中调试方法的另一实施例的单步处理流程示意图;
图6是本发明实施例中调试方法的另一实施例的抗结构化异常处理流程示意图;
图7是本发明实施例中调试设备的一个实施例的示意图;
图8是本发明实施例中调试设备的另一实施例的示意图。
具体实施方式
本发明实施例提供一种调试方法和调试设备。以下分别进行详细说明。
由于目标程序出现页面属性故障时,会跳转执行处理器的中断描述符表(IDT,Interrupt Descriptor Table)的页面属性故障对应的故障处理函数。因此,本发明实施例中,将用户想要进行调试的位置作为预置断点地址,对该地址所在页面的页面属性进行修改,并将处理器的IDT的页面属性故障对应的故障处理函数修改为自定义故障处理函数地址,使得目标程序运行到该地址所在页面时会出现页面属性故障,并跳转执行该自定义故障处理函数,从而使得调试设备截获对目标程序的控制权。在截获控制权后,将现场信息保存到当前线程对应的缓冲区并压栈保存,再对目标程序采用虚拟执行技术逐条运行,当目标程序运行到预置断点位置时,与用户交互,让用户对目标程序进行调试,从而在不修改目标程序代码的情况下实现对目标程序的调试。
请参阅图1,本发明实施例中调试方法的一个实施例包括:
101、将系统处理器的中断描述符表中,页面属性故障对应的故障处理函数地址,修改为自定义故障处理函数地址;
本发明实施例中,预先修改预置断点所在页面的页面属性,当目标程序访问预置断点所在页面时会出现页面属性故障,为了能够使调试设备在目标程序访问断点所在页面时获得控制权,需要将系统处理器的IDT中的页面属性故障对应的故障处理函数地址,修改为自定义故障处理函数地址。
当系统只有一个处理器时,只需要将该处理器的IDT中页面属性故障对应的故障处理函数地址,修改为自定义故障处理函数地址。
在多处理器环境下,每一个处理器都有它自己的IDT,因此,需要将系统的各个处理器的IDT中页面属性故障对应的故障处理函数地址,修改为自定义故障处理函数地址。
102、当目标程序出现指定的页面属性故障时,获取目标程序的现场信息;
预先对需要调试的预置断点所在页面修改页面属性,使得目标程序运行到该页面时会发生页面属性故障。
页面属性故障有多种,例如缺页故障和访问故障。当目标程序出现页面属性故障时,都会执行自定义故障处理函数,即执行步骤102至步骤107,使得调试设备截获对目标程序的控制权。
由于系统自身发生缺页故障的频率比较高,因此,可以指定只在当目标程序出现访问故障时,才执行自定义故障处理函数。
在获取目标程序的现场信息的同时,还可以获取目标程序出现故障的页面的预置断点地址。
103、将获取的现场信息保存到当前线程对应的虚拟执行缓冲区;
在单线程环境下,可以在内存中为线程创建一个对应的虚拟执行缓冲区,直接将获取的现场信息保存到当前线程对应的虚拟执行缓冲区。
在多线程环境下,由于现场信息是线程相关的,故需要对每一个被截获控制权的线程创建对应的虚拟执行缓冲区以用于保存故障发生时的现场信息。因此,在多线程环境下,在执行步骤102之后,在执行步骤103之前,先判断当前线程是否存在对应的虚拟执行缓冲区,若不存在,则创建当前线程对应的虚拟执行缓冲区,并触发步骤103,否则触发步骤103。
104、将当前线程对应的虚拟执行缓冲区中的现场信息压栈保存;
从步骤103到步骤104,系统从内核态切换到用户态。
105、判断目标程序扩展指令指针(EIP,Extended Instruction Pointer)是否与出现故障的页面的预置断点地址匹配,若匹配,则执行步骤106,否则执行步骤107;
目标程序EIP即下一个要运行的目标程序的指令所在地址。
本发明实施例中,可以修改多个页面的页面属性,在多个页面配置断点地址,可以在一张表中,保存被修改页面属性的页面与预置断点地址的对应关系。可以判断目标程序EIP的地址是否与表中出现页面属性故障时所在页面的预置断点地址匹配。
也可以在步骤102中获取现场信息的同时,获取出现页面属性故障时所在页面的预置断点地址,并且在步骤103中保存现场信息的同时,将获取的预置断点地址保存在当前线程对应的虚拟执行缓冲区中,此时,步骤105则为判断目标程序EIP是否与该缓冲区中的预置断点地址匹配。
106、与用户交互;
与用户交互,使用户能够对目标程序进行调试,具体交互的过程为现有公知技术,此处不作赘述。
107、拷贝构造目标程序扩展指令指针所指向指令到当前线程对应的虚拟执行缓冲区;
若步骤105中判定不匹配,则对目标程序EIP所指向指令拷贝构造,并将拷贝构造的结果写入当前线程对应的虚拟执行缓冲区,再执行该缓冲区中的指令,实现对目标程序的单步虚拟执行,然后再重复执行步骤105,直到目标程序运行到出现页面属性故障时所在页面的预置断点位置。
108、从栈中弹出现场信息,执行虚拟执行缓冲区中的指令,并重复执行步骤105。
本实施例中,通过修改页面属性故障对应的故障处理函数地址,使得在目标程序出现页面属性故障时,调试设备能够截获对目标程序的控制权,在截获控制权后,调试设备将现场信息保存到当前线程对应的缓冲区并压栈保存,再对目标程序的指令拷贝构造并执行,使目标程序运行到预置断点位置,与用户交互,让用户能够对目标程序进行调试,从而实现在不修改目标程序代码的情况下对目标程序进行调试,隐蔽性较高。
需要说明的是,在步骤108中执行的指令为跳转指令时,可能导致目标程序EIP超出出现页面属性故障的页面范围,导致在步骤105中一直无法与出现页面属性故障时所在页面的预置断点地址匹配,而一直拷贝构造目标程序EIP所指向指令并执行。因此,下面主要针对这种情况提供一具体实施例。
请参阅图2,本发明实施例中调试方法的另一实施例包括:
201、将系统处理器的中断描述符表中,页面属性故障对应的故障处理函数地址,修改为自定义故障处理函数地址;
步骤201请参阅对步骤101的说明。
202、当目标程序出现指定的页面属性故障时,获取目标程序的现场信息和出现故障的页面的预置断点地址;
可以从保存有页面与预置断点地址对应关系的表中,获取出现故障的页面的预置断点地址。
本实施例中的故障即目标程序出现的页面属性故障。
203、判断当前线程是否存在对应的虚拟执行缓冲区,若不存在,则执行步骤204,否则执行步骤205;
204、创建当前线程对应的虚拟执行缓冲区,并触发步骤205;
205、将获取的现场信息、预置断点地址保存到当前线程对应的虚拟执行缓冲区;
206、将当前线程对应的虚拟执行缓冲区中的现场信息压栈保存;
从步骤205到步骤206,系统从内核态切换到用户态。
207、判断目标程序扩展指令指针是否超出出现故障的页面范围,若超出,则执行步骤208,否则执行步骤209;
208、继续执行目标程序;
从栈中弹出现场信息继续执行目标程序。
209、判断目标程序扩展指令指针,是否与当前线程对应的虚拟执行缓冲区中的预置断点地址匹配,若匹配,则执行步骤210,否则执行步骤211;
当前线程对应的虚拟执行缓冲区中的预置断点地址,就是故障所在页面的预置断点地址。
210、与用户交互;
211、拷贝构造目标程序扩展指令指针所指向指令到当前线程对应的虚拟执行缓冲区;
212、从栈中弹出现场信息,执行当前线程对应的虚拟执行缓冲区中的指令,并重复执行步骤207。
本实施例中,在判定目标程序EIP未超出出现故障的页面范围时,判断目标程序EIP是否与当前线程对应的虚拟执行缓冲区中的预置断点地址匹配,当匹配时与用户交互,从而能够避免一直无法与出现页面属性故障时所在页面的预置断点地址匹配的问题。
为便于理解,下面结合图3、图4、图5和图6,以一更具体实施例对本发明实施例中的调试方法进行详细说明。为便于阐述,将本实施例中的调试方法分为4部分进行阐述,对这4部分分别简称为多处理器流程、多线程流程、单步处理流程和抗结构化异常处理(SEH,Structured Exception Handling)流程。
请参阅图3,本发明实施例中调试方法的另一实施例的多处理器流程包括:
301、获得系统处理器数量;
系统处理器ID从0开始计数,假设系统共4个处理器,那么这四个处理器ID分别为0、1、2、3。
302、设置目标程序对系统第一个处理器的亲和性,并获取该处理器的中断描述符表地址;
第一个处理器的ID为0。
303、将第一个处理器的中断描述符表中,页面属性故障对应的故障处理函数地址,修改为自定义故障处理函数地址;
304、对应于处理器,保存步骤303中被修改的故障处理函数地址;
将处理器IDT中页面属性故障对应的故障处理函数地址,修改为自定义故障处理函数地址,不仅对目标程序适用,对所有在该处理器下运行的程序都适用,因此,可以对应于处理器,保存被修改的系统自带的故障处理函数地址,以使得除了目标程序之外的其它程序在出现页面属性故障时,能够被系统自带的故障处理函数处理。
305、判断当前处理器的序号是否为系统处理器数量与1的差,若不是,则执行步骤302,以设置目标程序对系统下一个处理器的亲和性,否则结束操作。
第一个循环中,当前处理器为第一个处理器,其ID为0,因此,在执行步骤305之后,重复执行步骤302,以设置目标程序对系统第二个处理器(ID为1)的亲和性。
当目标程序出现指定的页面属性故障时,调试设备获得控制权,即进入自定义故障处理函数,该函数包括多线程流程。
由于调试设备对断点所在页面的页面属性进行修改,导致所有对此页面指令的访问操作都会被中断下来。而单步处理流程需要构造虚拟执行缓冲区以保存出现页面故障时的现场信息,而现场信息是线程相关的,故需要在单步处理流程之前,对每一个被截获控制权的线程构造虚拟执行缓冲区以用于保存故障发生时的现场信息。
请参阅图4,本发明实施例中调试方法的另一实施例的多线程流程包括:
401、当目标程序出现指定的页面属性故障时,获取目标程序的现场信息和出现故障的页面的预置断点地址;
402、判断当前线程是否存在对应的虚拟执行缓冲区,若不存在,则执行步骤403,否则执行步骤404;
403、创建当前线程对应的虚拟执行缓冲区,并触发步骤404;
404、将获取的现场信息、预置断点地址保存到当前线程对应的虚拟执行缓冲区。
多线程流程是在系统的内核态下进行的,多线程流程将现场信息保存到当前线程的缓冲区内,再启动单步处理流程进行处理,这样就实现了多个线程间的并发单步虚拟执行,避免了线程间相互干扰的情况,实现多线程环境下的隐蔽调试。
在内核态执行了多线程流程之后,在用户态执行单步处理流程。
请参阅图5,本发明实施例中调试方法的另一实施例的单步处理流程包括:
501、将步骤404保存到虚拟执行缓冲区中的现场信息压栈保存;
502、判断目标程序扩展指令指针是否超出出现故障的页面范围,若超出,则执行步骤503,否则执行步骤504;
若目标程序EIP超出步骤401出现故障的页面范围,则执行步骤503,将控制权交还给目标程序,否则执行步骤504,以判断目标程序EIP是否为断点。
503、继续执行目标程序;
504、判断目标程序扩展指令指针是否与步骤404中,保存到当前线程对应的虚拟执行缓冲区的预置断点地址匹配,若匹配,则执行步骤505,否则执行步骤506;
505、与用户交互;
若步骤504判定匹配,则与用户交互,让用户对目标程序进行调试。
506、对目标程序扩展指令指针所指向指令进行拷贝构造,并将拷贝构造的结果写入当前线程对应的虚拟执行缓冲区;
507、从栈中弹出现场信息,执行步骤506中写入当前线程对应的虚拟执行缓冲区中的指令,并重复执行步骤502。
单步处理流程采用代码拷贝构造技术,实现对目标程序进行逐条的虚拟执行。
另外,现有技术中,存在可实现反调试的SEH技术,应用该技术的系统,在目标程序的特定代码发生异常时,系统会调用异常分发函数(Ki UserException Dispatch)进行异常处理。因此,对于有利用抗SEH技术实现非正常跳转的目标程序拷贝构造并虚拟执行,则会使得单步处理流程跳出正常的执行流程,导致调试设备失去对目标程序的控制权。
为了确保对目标程序进行持续、稳定的监控调试,必须在单步处理流程虚拟执行出现异常时截获异常分发函数,并进行必要的处理以保持调试设备对目标程序的控制权,因此,本发明实施例中将系统自带的异常分发函数修改为自定义异常分发函数,该函数即抗SEH流程。
请参阅图6,本发明实施例中调试方法的另一实施例的抗SEH流程包括:
601、当执行目标程序的指令触发异常时,获取目标程序的现场信息;
602、判断触发异常的指令是否为虚拟执行缓冲区中的指令,若是,则执行步骤603,否则执行步骤607;
可以设置一虚拟执行标志位,在执行单步处理流程时该标志位为1,在执行目标程序时为0,根据虚拟执行标志位来判断触发异常的指令是否为虚拟执行缓冲区中的指令,若该标志位为0,则判定异常是由单步处理流程触发,执行步骤603,否则判定异常是由目标程序触发,执行步骤607。
也可以判断触发异常时的目标程序EIP是否在虚拟执行时的EIP范围内,若是,则判定异常是由单步处理流程触发,执行步骤603,否则判定异常是由目标程序触发,执行步骤607。
此处的异常为不同于上述指定的页面属性故障的,系统运行时可能发生的异常,而本发明实施例中的指定的页面属性故障是通过修改页面属性引发的。
603、将触发异常时的目标程序扩展指令指针修改为目标程序原始的扩展指令指针;
此处的触发异常时的目标程序EIP即虚拟执行时的目标程序EIP,将该虚拟执行时的目标程序EIP修改为该EIP所指指令的原始EIP。
604、在执行步骤603之后,与用户交互;
步骤603将EIP修改为目标程序原始EIP,使用户确定是目标程序的什么指令触发异常。
605、在执行步骤604之后,执行目标程序自带的异常处理函数;
对于目标程序的特定代码发生的异常,程序员预置了对应的异常处理函数。
606、在执行步骤605之后,将目标程序原始的扩展指令指针修改为触发异常时的目标程序扩展指令指针,并触发步骤506;
将目标程序原始EIP改回虚拟执行下发生异常时的目标程序EIP,并触发步骤506,以继续执行单步处理流程,从而使得调试设备保持对目标程序的控制权。
本实施例中,优先让用户处理异常,再由目标程序自带的异常处理函数处理异常。可以理解的是,也可以在步骤602中判定触发异常的指令为虚拟执行缓冲区中的指令之后,直接由目标程序自带的异常处理函数处理异常,然后触发步骤506,也能够保持调试设备对目标程序的控制权,因此,步骤603、604和606是可以省略的。
607、与用户交互;
若在步骤602中判定触发异常的指令不是虚拟执行缓冲区中的指令,则确定是判定异常是由目标程序触发,可以优先让用户处理异常,再由目标程序自带的异常处理函数处理异常,然后再继续执行目标程序。
608、在执行步骤607之后,执行目标程序自带的异常处理函数;
609、在执行步骤608之后,继续执行目标程序。
下面对本发明实施例中的调试设备进行详细说明。
请参阅图7,本发明实施例中调试设备的一个实施例包括:
第一修改模块701,用于将系统处理器的中断描述符表中,页面属性故障对应的故障处理函数地址,修改为自定义故障处理函数地址;
获取模块702,用于当目标程序出现指定的页面属性故障时,获取目标程序的现场信息;
第一保存模块703,用于将获取的现场信息保存到当前线程对应的虚拟执行缓冲区;
第二保存模块704,用于将当前线程对应的虚拟执行缓冲区中的现场信息压栈保存;
第一判断模块705,用于判断目标程序扩展指令指针是否与出现故障的页面的预置断点地址匹配,若匹配,则触发交互模块执行相关操作,否则触发拷贝模块执行相关操作;
交互模块706,用于与用户交互;
拷贝模块707,用于拷贝构造目标程序扩展指令指针所指向指令到虚拟执行缓冲区;
执行模块708,用于从栈中弹出现场信息,执行虚拟执行缓冲区中的指令,并触发第一判断模块执行相关操作。
本实施例中调试设备的工作原理如下:
先通过第一修改模块701修改系统处理器的IDT中,页面属性故障对应的故障处理函数地址,并修改预置断点所在页面的页面属性,当目标程序运行到该页面时,会出现页面属性故障,跳转执行自定义故障处理函数,从而调试设备获得对目标程序的控制权。
然后,运行目标程序,当目标程序出现指定的页面属性故障,使得调试设备获得对目标程序的控制权之后,获取模块702获取现场信息,第一保存模块703把该现场信息保存到当前线程对应的虚拟执行缓冲区,第二保存模块704再从该缓冲区导入该现场信息,并将该现场信息压栈保存。
在第二保存模块704将现场信息压栈保存之后,第一判断模块705执行相关操作,以确定目标程序是否运行到断点位置。若第一判断模块705判定匹配,则确定目标程序运行到断点位置,交互模块与用户交互,以让用户可以对目标程序进行调试,否则拷贝模块拷贝构造指令后,执行模块执行该指令,再触发第一判断模块705执行相关操作,直到目标程序运行到断点位置时为止。
本实施例中,通过修改页面属性故障对应的故障处理函数地址,使得在目标程序出现页面属性故障时,调试设备能够截获对目标程序的控制权,在截获控制权后,调试设备将现场信息保存到当前线程对应的缓冲区并压栈保存,再对目标程序的指令拷贝构造并执行,使目标程序运行到预置断点位置,与用户交互,从而实现在不修改目标程序代码的情况下对目标程序进行调试,隐蔽性较高。
请参阅图8,与图7所示实施例相比,本发明实施例中调试设备的另一实施例还包括:
创建模块801,用于在获取模块702执行相关操作之后,判断当前线程是否存在对应的虚拟执行缓冲区;若不存在,则创建当前线程对应的虚拟执行缓冲区,并触发第一保存模块703执行相关操作;否则触发第一保存模块703执行相关操作;
第二判断模块802,用于在第一判断模块705执行相关操作之前,判断目标程序扩展指令指针是否超出出现故障的页面范围,若未超出,则触发第一判断模块705执行相关操作;
第三保存模块803,用于在第一修改模块701执行相关操作之后,保存被修改的故障处理函数地址;
第二修改模块804,用于将系统自带的异常分发函数修改为自定义异常分发函数;
异常处理模块805,用于当执行目标程序的指令触发异常时,判断该指令是否为虚拟执行缓冲区中的指令;若是,则执行目标程序自带的异常处理函数,并触发拷贝模块707执行相关操作。
本实施例中调试设备的工作原理如下:
先通过第一修改模块701修改系统处理器的IDT中,页面属性故障对应的故障处理函数地址。并且,第二修改模块804将系统自带的异常分发函数修改为自定义异常分发函数。在第一修改模块701执行相关操作之后,第三保存模块803保存被修改的故障处理函数地址。
然后,运行目标程序,当目标程序出现指定的页面属性故障,使得调试设备获得对目标程序的控制权之后,获取模块702获取现场信息,创建模块801若判定当前线程不存在对应的虚拟执行缓冲区,则创建模块801创建当前线程对应的虚拟执行缓冲区,并触发第一保存模块703把获取的现场信息保存到该缓冲区,否则创建模块触发第一保存模块703把获取的现场信息保存到当前线程对应的虚拟执行缓冲区,第二保存模块704再从当前线程对应的虚拟执行缓冲区导入该现场信息,并将该现场信息压栈保存。
在第二保存模块704将现场信息压栈保存之后,第二判断模块802判断目标程序扩展指令指针是否超出出现故障的页面范围,若未超出,则触发第一判断模块705执行相关操作,以确定目标程序是否运行到断点位置。若第一判断模块705判定匹配,则确定目标程序运行到断点位置,交互模块706与用户交互,以让用户可以对目标程序进行调试,否则拷贝模块707拷贝构造指令后,执行模块708执行该指令,再触发第二判断模块802执行相关操作,直到目标程序运行到断点位置时为止。
当执行目标程序的指令触发异常时,异常处理模块805判断该指令是否为虚拟执行缓冲区中的指令;若是,则执行目标程序自带的异常处理函数,并触发拷贝模块707执行相关操作。
本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:ROM、RAM、磁盘或光盘等。
以上对本发明实施例所提供的调试方法和调试设备进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

Claims (12)

1.一种调试方法,其特征在于,包括:
将系统处理器的中断描述符表中,页面属性故障对应的故障处理函数地址,修改为自定义故障处理函数地址;
当目标程序出现指定的页面属性故障时,获取目标程序的现场信息;
将获取的现场信息保存到当前线程对应的虚拟执行缓冲区;
将所述虚拟执行缓冲区中的现场信息压栈保存;
判断目标程序扩展指令指针是否与出现故障的页面的预置断点地址匹配;
若匹配,则与用户交互;
否则拷贝构造目标程序扩展指令指针所指向指令到当前线程对应的虚拟执行缓冲区;
从栈中弹出现场信息,执行所述虚拟执行缓冲区中的指令,并重复判断目标程序扩展指令指针是否与预置断点地址匹配。
2.根据权利要求1所述方法,其特征在于,在将获取的现场信息保存到当前线程对应的虚拟执行缓冲区之前,还包括:
判断当前线程是否存在对应的虚拟执行缓冲区;
若不存在,则创建当前线程对应的虚拟执行缓冲区,并触发所述将获取的现场信息保存到当前线程对应的虚拟执行缓冲区的步骤;
否则触发所述将获取的现场信息保存到当前线程对应的虚拟执行缓冲区的步骤。
3.根据权利要求1所述方法,其特征在于,在判断目标程序扩展指令指针是否与出现故障的页面的预置断点地址匹配之前,还包括:
判断目标程序扩展指令指针是否超出出现故障的页面范围;
若未超出,则触发所述判断目标程序扩展指令指针是否与出现故障的页面的预置断点地址匹配的步骤。
4.根据权利要求1所述方法,其特征在于,在将页面属性故障对应的故障处理函数地址,修改为自定义故障处理函数地址之后,还包括:保存被修改的故障处理函数地址。
5.根据权利要求1所述方法,其特征在于,在获取目标程序的现场信息的同时,还获取目标程序出现故障的页面的预置断点地址,并将该地址与该现场信息一起保存到当前线程对应的虚拟执行缓冲区;
所述判断目标程序扩展指令指针是否与出现故障的页面的预置断点地址匹配,具体包括:
判断目标程序扩展指令指针是否与当前线程对应的虚拟执行缓冲区的预置断点地址匹配。
6.根据权利要求1所述方法,其特征在于,所述方法还包括:
将系统自带的异常分发函数修改为自定义异常分发函数;
当执行目标程序的指令触发异常时,判断该指令是否为虚拟执行缓冲区中的指令;
若是,则执行目标程序自带的异常处理函数,并触发所述拷贝构造目标程序扩展指令指针所指向指令到虚拟执行缓冲区的步骤。
7.根据权利要求6所述方法,其特征在于,在执行目标程序自带的异常处理函数之前,还包括:将异常发生时的目标程序扩展指令指针修改为目标程序原始的扩展指令指针,并触发所述执行目标程序自带的异常处理函数的步骤;
在执行目标程序自带的异常处理函数之后,在拷贝构造目标程序扩展指令指针所指向指令到虚拟执行缓冲区之前,还包括:将所述目标程序原始的扩展指令指针修改为异常发生时的目标程序扩展指令指针。
8.一种调试设备,其特征在于,包括:
第一修改模块,用于将系统处理器的中断描述符表中,页面属性故障对应的故障处理函数地址,修改为自定义故障处理函数地址;
获取模块,用于当目标程序出现指定的页面属性故障时,获取目标程序的现场信息;
第一保存模块,用于将获取的现场信息保存到当前线程对应的虚拟执行缓冲区;
第二保存模块,用于将当前线程对应的虚拟执行缓冲区中的现场信息压栈保存;
第一判断模块,用于判断目标程序扩展指令指针是否与出现故障的页面的预置断点地址匹配,若匹配,则触发交互模块执行相关操作,否则触发拷贝模块执行相关操作;
交互模块,用于与用户交互;
拷贝模块,用于拷贝构造目标程序扩展指令指针所指向指令到虚拟执行缓冲区;
执行模块,用于从栈中弹出现场信息,执行虚拟执行缓冲区中的指令,并触发第一判断模块执行相关操作。
9.根据权利要求8所述设备,其特征在于,所述设备还包括:
创建模块,用于在获取模块执行相关操作之后,判断当前线程是否存在对应的虚拟执行缓冲区;若不存在,则创建当前线程对应的虚拟执行缓冲区,并触发第一保存模块执行相关操作;否则触发第一保存模块执行相关操作。
10.根据权利要求8所述设备,其特征在于,所述设备还包括:
第二判断模块,用于在第一判断模块执行相关操作之前,判断目标程序扩展指令指针是否超出出现故障的页面范围,若未超出,则触发第一判断模块执行相关操作。
11.根据权利要求8所述设备,其特征在于,所述设备还包括:
第三保存模块,用于在第一修改模块执行相关操作之后,保存被修改的故障处理函数地址。
12.根据权利要求8所述设备,其特征在于,所述设备还包括:
第二修改模块,用于将系统自带的异常分发函数修改为自定义异常分发函数;
异常处理模块,用于当执行目标程序的指令触发异常时,判断该指令是否为虚拟执行缓冲区中的指令;若是,则执行目标程序自带的异常处理函数,并触发拷贝模块执行相关操作。
CN201010142081.0A 2010-04-06 2010-04-06 调试方法和调试设备 Expired - Fee Related CN102214137B (zh)

Priority Applications (3)

Application Number Priority Date Filing Date Title
CN201010142081.0A CN102214137B (zh) 2010-04-06 2010-04-06 调试方法和调试设备
PCT/CN2010/079643 WO2011124076A1 (zh) 2010-04-06 2010-12-10 调试方法和调试设备
US13/647,190 US20130036331A1 (en) 2010-04-06 2012-10-08 Debugging method and debugging device

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201010142081.0A CN102214137B (zh) 2010-04-06 2010-04-06 调试方法和调试设备

Publications (2)

Publication Number Publication Date
CN102214137A true CN102214137A (zh) 2011-10-12
CN102214137B CN102214137B (zh) 2014-01-22

Family

ID=44745456

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201010142081.0A Expired - Fee Related CN102214137B (zh) 2010-04-06 2010-04-06 调试方法和调试设备

Country Status (3)

Country Link
US (1) US20130036331A1 (zh)
CN (1) CN102214137B (zh)
WO (1) WO2011124076A1 (zh)

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2013155822A1 (zh) * 2012-04-17 2013-10-24 华为技术有限公司 一种实现经过性数据断点的方法、装置及系统
CN103577326A (zh) * 2013-11-05 2014-02-12 北京奇虎科技有限公司 Debug调试方法和装置
CN106294175A (zh) * 2016-08-19 2017-01-04 浪潮(北京)电子信息产业有限公司 一种程序执行行为可视化方法及系统
WO2017107576A1 (zh) * 2015-12-25 2017-06-29 华为技术有限公司 一种生成处理器故障记录的方法及装置
CN111338831A (zh) * 2020-02-10 2020-06-26 北京字节跳动网络技术有限公司 一种多线程运行性能的处理方法、装置、介质和电子设备
CN114327648A (zh) * 2021-12-16 2022-04-12 北京安天网络安全技术有限公司 一种驱动调试方法、装置、电子设备及存储介质
CN115687159A (zh) * 2022-12-29 2023-02-03 飞腾信息技术有限公司 调试方法、装置及计算机可读存储介质

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104346274B (zh) * 2013-07-29 2017-06-06 国际商业机器公司 程序调试器及一种程序的调试方法
US9582312B1 (en) 2015-02-04 2017-02-28 Amazon Technologies, Inc. Execution context trace for asynchronous tasks
CN113454607B (zh) * 2019-03-21 2023-08-22 杭州飞步科技有限公司 调试方法、装置及片上系统
CN110888812B (zh) * 2019-11-26 2023-11-07 国核自仪系统工程有限公司 终端页面的响应时间的测试系统及测试方法

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030014736A1 (en) * 2001-07-16 2003-01-16 Nguyen Tai H. Debugger breakpoint management in a multicore DSP device having shared program memory
US20040083458A1 (en) * 2002-10-24 2004-04-29 International Business Machines Corporation Method and apparatus for setting breakpoints when debugging integrated executables in a heterogeneous architecture
US20070033577A1 (en) * 2005-08-08 2007-02-08 Arackal Paulose K Method and apparatus for debugging program code
CN101364253A (zh) * 2007-08-06 2009-02-11 电子科技大学 反恶意程序隐蔽调试引擎与方法
CN101620660A (zh) * 2009-07-31 2010-01-06 北京大学 一种Windows操作系统下钩子的防御方法

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030014736A1 (en) * 2001-07-16 2003-01-16 Nguyen Tai H. Debugger breakpoint management in a multicore DSP device having shared program memory
US20040083458A1 (en) * 2002-10-24 2004-04-29 International Business Machines Corporation Method and apparatus for setting breakpoints when debugging integrated executables in a heterogeneous architecture
US20070033577A1 (en) * 2005-08-08 2007-02-08 Arackal Paulose K Method and apparatus for debugging program code
CN101364253A (zh) * 2007-08-06 2009-02-11 电子科技大学 反恶意程序隐蔽调试引擎与方法
CN101620660A (zh) * 2009-07-31 2010-01-06 北京大学 一种Windows操作系统下钩子的防御方法

Cited By (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2013155822A1 (zh) * 2012-04-17 2013-10-24 华为技术有限公司 一种实现经过性数据断点的方法、装置及系统
CN103577326A (zh) * 2013-11-05 2014-02-12 北京奇虎科技有限公司 Debug调试方法和装置
CN103577326B (zh) * 2013-11-05 2016-06-29 北京奇虎科技有限公司 Debug调试方法和装置
WO2017107576A1 (zh) * 2015-12-25 2017-06-29 华为技术有限公司 一种生成处理器故障记录的方法及装置
CN106294175A (zh) * 2016-08-19 2017-01-04 浪潮(北京)电子信息产业有限公司 一种程序执行行为可视化方法及系统
CN111338831A (zh) * 2020-02-10 2020-06-26 北京字节跳动网络技术有限公司 一种多线程运行性能的处理方法、装置、介质和电子设备
CN111338831B (zh) * 2020-02-10 2023-06-09 北京字节跳动网络技术有限公司 一种多线程运行性能的处理方法、装置、介质和电子设备
CN114327648A (zh) * 2021-12-16 2022-04-12 北京安天网络安全技术有限公司 一种驱动调试方法、装置、电子设备及存储介质
CN114327648B (zh) * 2021-12-16 2024-02-02 北京安天网络安全技术有限公司 一种驱动调试方法、装置、电子设备及存储介质
CN115687159A (zh) * 2022-12-29 2023-02-03 飞腾信息技术有限公司 调试方法、装置及计算机可读存储介质
CN115687159B (zh) * 2022-12-29 2023-03-21 飞腾信息技术有限公司 调试方法、装置及计算机可读存储介质

Also Published As

Publication number Publication date
CN102214137B (zh) 2014-01-22
US20130036331A1 (en) 2013-02-07
WO2011124076A1 (zh) 2011-10-13

Similar Documents

Publication Publication Date Title
CN102214137B (zh) 调试方法和调试设备
KR101244014B1 (ko) 멀티프로세서 컴퓨팅 시스템에서 메모리 일관성 보호
US7996629B2 (en) Multiprocessor computing system with multi-mode memory consistency protection
Thekkath et al. Hardware and software support for efficient exception handling
CN101587455B (zh) 一种用于vxWorks操作系统检查内存泄漏的方法
US7225431B2 (en) Method and apparatus for setting breakpoints when debugging integrated executables in a heterogeneous architecture
US7950001B2 (en) Method and apparatus for instrumentation in a multiprocessing environment
CN102388368B (zh) 一种内存监控方法及装置
US20080077909A1 (en) Enabling multiple instruction stream/multiple data stream extensions on microprocessors
WO2014052637A1 (en) Methods and systems for performing a replay execution
JPH05224911A (ja) 動的命令修正制御装置
CN102663312A (zh) 一种基于虚拟机的rop攻击检测方法及系统
US20120110554A1 (en) Step-type operation processing during debugging by machine instruction stepping concurrent with setting breakpoints
CN101604283B (zh) 一种基于Linux内核页表替换的内存访问模型追踪方法
CN104536912A (zh) 在小型操作系统中实现内存保护模式的装置和方法
CN105095079B (zh) 一种热点模块指令跟踪的方法及设备
CN102662845B (zh) 一种实现经过性数据断点的方法、装置及系统
CN101650688B (zh) 一种访问vm_io地址空间的方法和用户态调试器
KR102462864B1 (ko) 멀티 코어를 이용한 동적 바이너리 인스트루멘테이션 장치 및 방법
JP4978914B2 (ja) マイクロプロセッサ上での複数命令ストリーム/複数データストリームの拡張を可能にする方法およびシステム
Lan et al. Thunderkaller: Profiling and Improving the Performance of Syzkaller
Pouget et al. User level DB: a debugging API for user-level thread libraries
Yoon et al. Exploring OS-based full-system deterministic replay
Wu et al. Efficiently trigger data races through speculative execution
Kim et al. Multiprocessor MMIO Tracing via Memory Protection and a Shadow Page Table

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20170829

Address after: 201, room 1, building A, No. 518053, front Bay Road, Qianhai, Shenzhen Shenzhen cooperation zone, Guangdong, China

Patentee after: Shenzhen Zhitong World Technology Service Co. Ltd.

Address before: 518129 Bantian HUAWEI headquarters office building, Longgang District, Guangdong, Shenzhen

Patentee before: Huawei Technologies Co., Ltd.

EE01 Entry into force of recordation of patent licensing contract
EE01 Entry into force of recordation of patent licensing contract

Application publication date: 20111012

Assignee: Shannan City ran Technology Co., Ltd.

Assignor: Shenzhen Zhitong World Technology Service Co. Ltd.

Contract record no.: 2017440020096

Denomination of invention: Debugging method and debugging equipment

Granted publication date: 20140122

License type: Common License

Record date: 20171208

CF01 Termination of patent right due to non-payment of annual fee
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20140122

Termination date: 20200406