(计算机软件与理论专业论文)基于xen虚拟机的逆向调试方法研究与实现.pdf_第1页
(计算机软件与理论专业论文)基于xen虚拟机的逆向调试方法研究与实现.pdf_第2页
(计算机软件与理论专业论文)基于xen虚拟机的逆向调试方法研究与实现.pdf_第3页
(计算机软件与理论专业论文)基于xen虚拟机的逆向调试方法研究与实现.pdf_第4页
(计算机软件与理论专业论文)基于xen虚拟机的逆向调试方法研究与实现.pdf_第5页
已阅读5页,还剩59页未读 继续免费阅读

(计算机软件与理论专业论文)基于xen虚拟机的逆向调试方法研究与实现.pdf.pdf 免费下载

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

浙江大学硕士学位论文摘要 摘要 随着软件产业的蓬勃发展,软件的规模和复杂度越来越高。在软件开发过程 中,调试工作的难度也随之提高。使用一般的调试方法,往往会遇到这样的困境: 第一,由于系统的并行性和外部环境的变化,导致软件错误无法重现;第二,软 件错误的影响显现时,系统的状态已经发生改变,无法通过分析系统当前的状态 来挖掘错误出现的根源,只能选择从头开始运行,这样非常耗费时间。针对这样 的困境,本文提出了一种将确定性记录回放技术和逆向调试相结合的调试方法。 本文首先介绍了当前国内外逆向调试技术以及确定性记录回放技术的研究 进展,并分析这两种技术在解决前文所提出的困境的可行性。本文着重介绍了基 于x e n 虚拟机的逆向调试方法,其实现方案主要分为两个阶段:实现确定性记录 回放系统;为记录回放系统添加局部回放功能,并进一步实现逆向调试系统。 在确定性记录回放系统的研究中,本文讨论了实现确定性回放所需要记录的 信息以及具体的记录方法,并设计了记录文件的结构。通过在x e n 虚拟机管理器 中添加记录回放模块,实现了收集目标对象d o m u 虚拟机运行信息的记录功能, 以及根据记录重现d o m u 的运行过程的回放功能。 在逆向调试系统的研究过程中,本文首先讨论了引入检查点机制的必要性和 具体的实现方法;并进一步研究了如何将回放系统与g d b 调试器相结合,实现 提供逆向调试命令的调试系统。 实验结果表明,本文所实现的逆向调试能够完整地重现调试对象的运行过 程,并且可以通过逆向调试命令使其逆向运行,加以分析调试。而实现这些功能 所带来的空间消耗和性能损失均在当前硬件所能承受的范围,可以应用在实际的 调试工作中。 关键词:x e n 虚拟机确定性记录回放可逆调试检查点g d b 调试器 a b s t r a c t w i t ht h eb o o m i n gs o f t w a r ei n d u s t r y , s i z ea n dc o m p l e x i t yo fs o f t w a r e a r e i n c r e a s i n g i np r o c e s so fs o f t w a r ed e v e l o p m e n t , i t sm o r ed i f f i c u l tt od e b u g u s i n g o r d i n a r yd e b u g g i n gm e t h o d s ,w ew i l le n c o u n t e rt w op r o b l e m s f i r s t ,s o m es o f t w a r e b u gc a n tb er e p r o d u c e d ,s i n c et h ee x t e r n a le n v i r o n m e n tc h a n g e s s e c o n d ,t h es y s t e m s t a t eh a sc h a n g e dw h e nw ef i n dr e s u l tc a u s e db yt h ee r r o r i t st i m e c o n s u m i n gt o r e s t a r tt h ep r o g r a m i nt h i sp a p e r , w ep r e s e n tan e wd e b u g g i n gm e t h o dt os o l v et h e s e p r o b l e m s t h i sm e t h o dc o m b i n e st h ed e t e r m i n i s t i cr e c o r d i n ga n dr e p l a y i n gt e c h n o l o g y a n dt h er e v e r s i b l ed e b u g g i n gt e c h n o l o g y f i r s t w ei n t r o d u c ep r e s e n ts i t u a t i o no ft h ed e t e r m i n i s t i cr e c o r d i n ga n dr e p l a y i n g t e c h n o l o g ya n dt h er e v e r s i b l ed e b u g g i n gt e c h n o l o g y t h e n ,w ed i s c u s sh o w t os o l v e t h ep r o b l e m su s i n gt h e s et e c h n o l o g i e s t h e r ea r et w op a r t so fw o r ki nt h ep a p e r , h o w t oi m p l e m e n td e t e r m i n i s t i cr e c o r d i n ga n dr e p l a y i n gs y s t e ma n dh o wt oi m p l e m e n t r e v e r s i b l ed e b u g g i n gb yi n t r o d u c i n gc h e c k p o i n tm e c h a n i s m i nr e s e a r c ht oi m p l e m e n td e t e r m i n i s t i cr e c o r d i n ga n dr e p l a y i n gs y s t e m ,w ed i s c u s s w h a ti n f o r m a t i o ni sn e e d e da n dh o wt or e c o r d w ea l s od e s i g naf i l ef o r m a tt os a v e t h e s er e c o r d s w ea d dam o d u l ei nt h ex e nh y p e r v i s o rt or e c o r dt h en o n d e t e r m i n i s t i c e v e n to ft h ed o m uv i r t u a lm a c h i n e ,a n dt or e p l a yt h er u n n i n gp r o c e s so f d o m uu s i n g t h e s er e c o r d s t oi m p l e m e n tt h er e v e r s i b l ed e b u g g i n gs y s t e m ,w ed i s c u s sh o wt oa d dp a r t i a l r e p l a y i n gf u n c t i o nb yi n t r o d u c ec h e c k p o i n tm e c h a n i s m ,a n dh o w t om o d i f yt h eg d b d e b u g g e rt os u p p o r tr e v e r s i b l ed e b u g g i n g t h es t a t i s t i c so fe x p e r i m e n ts h o w st h er e v e r s i b l ed e b u g g i n gm e t h o di nt h i sp a p e r c a nr e p r o d u c et h ew h o l er u n n i n gp r o c e s s ,e x e c u t ea n dd e b u gt h ev i r t u a lm a c h i n e r e v e r s e l y i t so n l yi n t r o d u c e sar e a s o n a b l ep e r f o r m a n c el o s sa n ds p a c ec o n s u m p t i o n k e y w o r d s :x e nv i r t u a lm a c h i n e ,d e t e r m i n i s t i cr e c o r d i n g a n dr e p l a y i n g , r e v e r s i b l e d e b u g g i n g ,c h e c k p o i n t ,g d bd e b u g g e r 浙江大学硕士学位论文图目录 图目录 图1 1 兼容内核实现结构图2 图1 2 循环调试法的基本流程4 图2 1g d b 正向调试状态图8 图2 2g d b 逆向向调试状态图8 图2 3 逆向调试器p o r d 架构10 图2 4b u g n e t 系统结构1 2 图2 5f l a s h b a c k 的插桩机制1 3 图2 6e x e c r e c o r d e r 的记录回放示意图1 5 图2 7r e v i r t 结构图1 6 图3 1 基于x e n 虚拟机的记录回放系统1 7 图3 2x e n 的前后端驱动架构2 2 图3 3 外部设备输入记录的实现方式2 2 图4 1 检查点的跳转机制3l 图4 2 逆向调试系统的结构3 3 图4 3r - c o n ti n u e 命令基本流程3 5 图4 4 汇编级r - s t e p 命令基本流程3 6 图4 5 语言级r - s t e p 命令基本流程3 7 图5 1t e s t 程序代码4 0 图5 2t e s t 程序代码记录阶段的运行结果4 0 图5 3 调试中直接运行结果4 l 图5 4 调试中g o t o 命令结果4 l 图5 5 调试中r - s t e p 命令结果4 2 图5 6 调试中r - c o n t i n u e 命令结果4 2 图5 7 确定性记录回放系统的性能损耗4 3 图5 8 检查点机制的性能损耗4 5 图5 9 检查点机制的空间消耗4 6 图5 1 0g o t o 命令的执行时间4 7 图5 1 lr - c o n t i n u e 命令的执行时间4 8 图5 1 2 汇编级别的r - s t e p 命令的执行时间4 9 图5 1 3 高级语言级别的r - s t e p 命令的执行时间。5 0 i i i 浙江大学硕士学位论文表目录 表目录 表2 ig d b 调试器v 7 实现的逆向调试命令。7 表3 1 共享信息页中与时间相关的字段2 l 表3 2 共享信息页中与时间相关的字段 。2 l 表3 3 记录系统的记录文件结构2 4 表3 4 记录系统的记录文件文件头结构2 4 表5 1 测试环境配置4 3 表5 2 记录过程的空间消耗4 4 i v 浙江大学研究生学位论文独创性声明 本人声明所呈交的学位论文是本人在导师指导下进行的研究工作及取得的研究成果。 除了文中特别加以标注和致谢的地方外,论文中不包含其他人已经发表或撰写过的研究成 果,也不包含为获得逝姿盘堂或其他教育机构的学位或证书而使用过的材料。与我一 同工作的同志对本研究所做的任何贡献均已在论文中作了明确的说明并表示谢意。 学位论文作者签名:签字日期:年月日 学位论文版权使用授权书 本学位论文作者完全了解逝姿盘堂 有权保留并向国家有关部门或机构送交本 论文的复印件和磁盘,允许论文被查阅和借阅。本人授权迸姿盘堂翼以将学位论文的 全部或部分内容编入有关数据库进行检索和传播,可以采用影印、缩印或扫描等复制手段 保存、汇编学位论文。 ( 保密的学位论文在解密后适用本授权书) 学位论文作者签名:导师签名: 签字日期:年月日签字日期: 年月 日 浙江人学硕士学位论文第1 章绪论 第1 章绪论 1 1 引言 软件开发过程中,软件缺陷的出现不可避免,并且它的危害很大。因此消除 软件缺陷是软件工程中的一项重要任务。消除软件缺陷的前提是找到导致缺陷的 根本原因。软件调试就是探索软件缺陷的根源并寻求其解决方案的过程【1 1 。软件 调试的效果决定了软件产品的质量,而软件调试的效率直接影响到整个软件开发 过程的进度。 随着计算机技术的蓬勃发展,软件的复杂度变得越来越高,软件缺陷的数量 也越来越多而且隐蔽性越来越强,软件调试工作也变得更为困难。经典的调试方 法一交互式的循环调试法,无法应对当前繁重而困难的软件调试工作,特别是 在系统软件开发过程中出现的系统崩溃、错误无法重现等问题。 因此,针对具体开发过程中所遇到的经典的调试方法无法解决的问题,提出 专门性的调试技术,丰富软件调试手段,提高软件调试的效率,是软件开发中的 一个重要话题。 1 2 课题的背景和意义 兼容内核项目是一个开源的操作系统项目,其目的是在l i n u x 内核中实现 w i n d o w s 操作系统的系统调用框架和设备驱动框架,使用户可以在l i n u x 操作系 统上高效地运行w i n d o w s 应用程序,从而提高l i n u x 在桌面操作系统市场的竞争 力【2 1 0 w i n e t 3 】是l i n u x 操作系统上一个用户态上提供w i n d o w sa p i 的模拟器。它使 得w i n d o w s 应用程序可以在l i n u x 系统上运行。但是,由于w i n e 在用户态提供 w i n d o w s 系统调用,每次调用都会引发多次上下文切换,严重影响运行效率。兼 容内核针对w i n e 的缺点,把w i n d o w s 系统调的实现移入l i n u x 内核,减少 w i n d o w s 应用程序调用系统调用时引发的上下文切换次数,从而提高运行效率, 浙江大学硕士学位论文第1 章绪论 其实现机制如图1 1 所示。 图1 1 兼容内核实现结构图 由于兼容内核项目需要修改l i n u x 内核,在调试过程中遇到不少问题。而这 些问题,经典的交互式的循环调试方法无法解决。其中有两个问题尤为重要。 第一,由于l i n u x 操作系统的并发性和外部环境( 用户输入、网络等) 的复 杂性,调试过程中发现的一些软件错误可能无法重现。对于应用程序来说,无法 重现的错误往往是一些出现概率很小的错误,对软件的重要性不高。但是由于兼 容内核是对l i n u x 内核进行开发,这些无法重现的错误也很重要。如果不消除这 些软件错误,则会破坏l i n u x 内核的稳定性。 第二,兼容内核项目的开发,需要在l i n u x 内核中添加w i n d o w s 操作系统的 系统调用。要验证重新实现的w i n d o w s 系统调用的代码是否正确,需要对缺少源 代码的w i n d o w s 应用程序进行调试,让w i n d o w s 应用程序调用重性实现的 w i n d o w s 系统调用。但是,由于操作系统的并发性,当w i n d o w s 应用程序调用重 新实现的w i n d o w s 系统调用出错后,往往需要继续运行一段时间,错误导致的影 响才会显现出来,而这时程序和操作系统的状态已经发生改变,无法准确的定位 错误的根源。这时,调试人员需要重头开始运行程序,耗费大量的时间来将系统 恢复到出错的位置前的状态,严重影响调试工作的效率。 这两个问题,并不是兼容内核项目所特有的,在所有的系统软件开发和大型 软件( 如服务器端软件) 的开发过程中,同样会遇到。 2 浙江大学硕士学位论文第l 章绪论 针对软件错误无法重现的问题,目前最有效的解决方案是利用确定性回放技 术【4 l 将监视对象的整个运行过程完整地记录下来,在回放过程中准确地重现软件 错误发生的整个过程。 而对于第二个问题,一种解决方法是在运行过程中,利用快照技术【5 】把程序 的状态保存起来,在下一次调试中利用快照迅速恢复调试的环境,减少耗费的时 间。但是这种方案,发现错误的根源并没有任何实质的帮助。更为有效的解决方 法是为调试器增加逆向调试功能【6 】,让调试对象逆向运行,逐步的退回到错误发 生的根源所在的位置。 但是,i i 前并没有一个完整的系统能够同时解决这两个问题,特别是没有能 够应用在系统软件开发的系统。在兼容内核的开发过程中,我们需要同时解决上 述的两个问题。所以,我们有必要开发一个结合确定性记录回放技术和逆向调试 技术的调试系统来提高调试工作的效率。 除了应用到系统软件开发过程中解决具体的调试问题外,为经典的交互式的 循环调试法添加新的调试手段,增强它的调试能力,对于软件调试领域的研究也 有重大意义。 图1 2 描述了循环调试法的基本流程。 3 浙江大学硕十学位论文第1 章绪论 是 图1 2 循环调试法的基本沉程 其中最为核心的一步是定位根源。在一般的调试过程中,调试对象只能正向 运行。但是由于软件错误的隐蔽性很强,等到调试者发现错误导致的影响时,系 统的状态已经发生改变,不利于挖掘出错误的根源。而利用逆向调试技术,可以 让调试对象逆向运行逐步回到引起错误发生的位置,从而提高了调试器定位根源 的能力。另一方面,利用确定性记录回放功能来代替直接重新开始运行调试对象, 能够更加准确的重现错误的发生过程,从而增强了调试器重现错误的能力。 结合确定性记录回放技术和逆向调试技术的调试方法研究,对于调试技术的 提高具有重要的意义。 1 3 本文的主要工作 本文通过将基于虚拟机的确定性记录回放技术和逆向调试技术相结合,提出 了一种基于x e n 虚拟机确定性记录回放系统基础上实现的可逆调试技术。这个方 4 浙江大学硕士学位论文 第1 章绪论 法将在网络服务器上用于跟踪网络攻击的确定性记录回放技术应用到调试领域, 并在回放系统的基础上结合基于快照的逆向调试技术,实现了一个基于x e n 虚拟 机的可逆调试系统,可应用于系统的软件开发,能够同时解决软件错误无法重现 和软件错误延迟显现导致的调试效率低下这两个使用循环调试法时遇到的问题。 本文的主要工作如下: 1 介绍了基于x e n 虚拟机的可逆调试系统相关的可逆调试技术和确定性记录 回放技术的国内外现状,并分析本论文实现的可逆调试系统的必要性。 2 在x e n 虚拟机上参照r e v i r t 系统的方法,实现了一个x e n 虚拟机上的确定 性记录【旦l 放系统。 3 引入检查点机制,为x e n 虚拟机上的确定性回放系统,添加局部的确定性 回放功能,为实现逆向调试系统提供基本的功能接口。 4 将确定性回放系统和g d b 调试器相结合,实现了一个基于x e n 虚拟机的 可逆调试系统。 1 4 本文的组织结构 本文的主要内容分为6 章,具体组织如下: 第l 章为绪论,介绍了课题的项目背景,课题提出的原因,论文的主要工作 和全文的组织结构。 第2 章主要介绍了目前可逆调试技术和确定性记录回放技术的相关工作。 第3 章主要介绍了x e n 虚拟机上的确定性记录回放系统需要记录的信息,信 息获取的方法以及根据记录实现回放功能的方法。 第4 章主要介绍了对确定性记录回放系统加以修改,通过引入检查点机制实 现局部回放功能,并与g d b 调试器相结合,进一步实现可逆调试功能的细节。 第5 章主要介绍了基于x e n 虚拟机的可逆调试系统的功能,以及实现此功能 所带来的性能和空间的损耗。 第6 章为总结和展望,提出了调试系统需要改进的地方,如硬件支持的虚拟 机( h v m ) 的移植、提高易用性、减少空间损耗等。 5 浙江大学硕士学位论文第2 章逆向调试和确定记录网放技术综述 第2 章逆向调试和确定记录回放技术综述 2 1 逆向调试技术介绍 在调试过程中,由于无法知道软件错误的具体位置,往往发现出现错误的时 候,引起出错的代码已经执行过了。这时,由于大多数调试器只支持正向调试命 令,调试者需要重头运行调试对象,重新开始调试,这个过程需要耗费大量时间, 尤其是在程序运行较长时间后才出错的情况下。如果在出现错误后,能够让调试 对象逆向运行,逐步回到引发出错的代码所在的位置,就可以大大提高调试效率。 1 9 7 3 年,m vz e l k o w i t 6 提出了逆向运行的概念,并逐步应用到调试领域, 形成逆向调试技术。目前,逆向调试技术的实现方式主要有三种:基于逆操作的 逆向调试、基于日志的逆向调试和基于快照的逆向调试。 2 1 1 基于逆操作的逆向调试 采用生成逆操作的方法来实现逆向调试的,是一些解释型的语言,如j a v a 和 j a n u s 。而这两种语言的具体实现方式又有所不同。 j a n u s 是c l u t z 7 1 在1 9 8 6 年提出的可逆向的语言8 1 。c l u t z 同时也提出了逆 向语言的定义。一个j a n u s 程序包含了变量声明和过程定义。其中,过程定义包 含过程名和语句。而语句定义为可逆的赋值语句_ 可逆的条件语句、可逆啪舌环 语句、过程调用、过程反调用或者语句序列。这样j a n u s 的所有语句都具有相应 的逆操作。t e t s u o 和r o b e r t l 9 】证明了j a n u s 语言的可逆性,并实现了一个j a n u s 语 言的解释器,可以进行逆向调试。 j a v a 本身并不是一种可逆语言,但是j a v a 程序运行时需要转换成字节码( b y t e c o d e ) 来运行,所以只需要在j a v a 的语言解释器中添加生成字节码的逆操作的功 能,就可以实现j a v a 语言的逆向调试。j c o o k 1 0 】在k a f f e 实现的j a v a 虚拟机基 础上添加了增加了逆向执行功能。具体实现方式结合了基于逆操作和基于日志的 实现方法( 详见2 1 2 节) ,对于b y t ec o d e 中的可逆操作通过逆指令实现,而非 6 浙江大学硕士学位论文 第2 章逆向调试和确定记录同放技术综述 可逆操作则通过记录操作中发生的状态变化来实现。 基于逆操作的逆向调试,仅仅可以应用在解释型的语言。而这些语言开发的 软件也仅仅局限为应用软件,无法在系统软件开发过程中使用,特别是无法在内 核开发中使用。 2 1 2 基于日志的逆向调试 基于日志的逆向调试实现方法,基本思路是把每条语句运行所发生的所有状 态变化( 包括寄存器、内存等) 记录下来,逆向调试时,根据日志把目标的状态 恢复到语句运行之前的数值,从而实现逆向运行【l 。g d b 调试器v 7 的逆向调试 功能就是通过这种方式实现的。 具体的,g d b 调试器v 7 实现了调试l i n u x 应用程序的一套完整的逆向调试 命令【1 2 】,如表2 1 所示。 表2 1g d b 调试器v 7 实现的逆向调试命令 命令作用 r e v e r s e - c o n t i n u e 逆向运行直到遇到停止事件( 断点、观察点、异常) r e v e r s e - s t e p 逆向运行直到前一行代码前 r e v e r s e s t e p i 逆向运行条指令 r e v e r s e n e x t 逆向n e x t ,逆向运行函数,不进入函数体 逆向n e x t i ,逆向运行一条指令,当指令是从一个函数返回 r e v e r s e n e x t i 时,逆向运行整个函数 r e v e r s e f i n i s h 类似f i n i s h 命令,逆向执行当前函数直到返【旦l 到调用者 s e te x e c d i r e c t i o n 设置一般命令的执行方向 【f o r w a r dr e v e r s e 】 这些逆向调试命令使用前需要先使用t a r g e tr e c o r d 命令,来确定逆向调试的范 围,即记录的起始位置。当逆向命令执行的目标超出记录范围时,g d b 调试器会 停止执行命令,并提示调试者,当前操作超出逆向调试的范围。 一般地,g d b 调试器正向调试时,执行过程如图2 1 所示。每执行一条指令, 底层的状态信息( 包括寄存器、内存等) 就会进入下一个状态。 7 浙江人学硕士学位论文第2 章逆向调试和确定记录网放技术综述 图2 1g d b 正向调试状态图 而当用户使用t a r g e tr e c o r d 命令为逆向调试开始记录操作后,g d b 的指令执 行过程则会如图2 2 所示。在记录过程中,在每条指令前,生成指令会修改的状 态记录。指令2 前生成了记录2 。当执行逆向调试命令时,调试器会根据对应的 记录,逐步恢复到目标位置的状态。在状态3 ,执行r e v e r s e s t e p 命令,g d b 会根 据记录3 来将状态恢复到执行指令3 之前的状态2 的状态。当逆向命令执行过以 后,重新正向执行时,不会重新执行指令,而是恢复到执行指令之后的状态。 图2 2g d b 逆向向调试状态图 当然,g d b 调试器生成记录时,需要获取足够多的运行信息,这些信息有一 部分无法在用户态获取。所以需要添加一个系统调用r e c o r d _ l i n u x _ s y s t e m _ c a l l , 8 浙江人学硕士学位论文 第2 章逆向调试和确定记录网放技术综述 在系统内核态中获取相关的信息来生成记录。 基于日志的逆向调试实现方式,需要下层调用的支持,所以仅仅支持用户态 的逆向调试,也就是说调试对象局限为应用程序。在系统软件的调试过程中无法 使用。另外,由于需要记录每条指令执行过程中的调试对象( 通常是进程) 的所 有状态变化,生成记录所消耗的空问很大。同时在r e c o r d 过程中,调试对象运行 的性能损耗也比较高。 2 1 3 基于快照的逆向调试 使用基于逆操作和基于日志的方法所实现的逆向调试,都是精确的逆向调 试,调试过程中用于存储逆操作和状态变化记录的空间消耗相当大,而且都不适 用于系统软件的调试。而基于快照的逆向调试,则是一种粗粒度的逆向调试。在 记录过程中,调试器周期性生成调试对象及其相关的状态的快照,需要运行逆向 调试命令时,恢复到目标位置之前的快照记录的状态,然后重新执行快照生成的 位置到目标位置之间指令,从而实现逆向调试。 罗琰 1 4 1 介绍了一种基于内核模式下进程快照的可逆调试方法,用于在调试用 户态的应用程序。g d b 调试器提供了生成进程快照的c o r ed u m p 技术,主要用于 进程崩溃时记录进程的状态,从而在下一次调试时,能够快速地恢复调试对象的 状态。但是g d b 调试器提供的c o r ed u m p 功能所记录的仅仅是进程的用户态信息。 罗琰通过添加内核系统调用g e t _ k e m e l _ i n f o 来获取内核信息,并设计了专用的 s n a p 文件格式来保存进程恢复所需要的所有信息。在执行逆向调试命令时,通过 e x e c v e o 系统调用,把s n a p 文件当成可执行文件进行加载,从而使得作为调试对 象的进程恢复到快照生成时状态,继而重新运行到指定的逆向调试命令的目标位 置,从而实现逆向调试。 罗琰提出的逆向调试实现方法,仅仅是一种进程级别的逆向调试,无法适用 于系统软件的开发,如内核开发。对于系统级别的软件的逆向调试,需要借助于 虚拟化技术的支持,通过虚拟机来生成整个系统的快照,从而实现系统级别的逆 向调试。 9 塑翌奎兰堕主堂垡笙奎笙! 翌望旦塑堕翌堕蕉里墨塑垫垫查堡垄 p o r d ( p o r t a b l ea n do p t i m i z e dr e v e r s i b l ed e b u g g e r ) t 5 1 是一个基于q e m u t l 6 1 虚 拟机的可移植的优化的逆向调试器。p o r d 主要由两部分组成:具有快照功能的 虚拟机和实现了逆向调试命令的r g d b 调试器,其结构如图2 3 所示。 图2 3 逆向调试器p o r d 架构 虚拟机部分是在q e m u 虚拟机基础上实现的,通过使用动态二进制翻译技术, 检查目标虚拟机的可执行代码,并使用植入管理器在其中植入生成快照的代码, 来保存虚拟机的运行状态。在逆向调试时,记录层会根据逆向调试命令的目标位 置将虚拟机恢复到对应的快照所记录的状态。由于p o r d 利用的是二进制翻译的 方式来实现虚拟化的,虚拟化所带来的性能损耗比较大,在二进制翻译模式下, 运行的时间开销达到本地c p u 执行时间的1 0 倍,运行效率很低,严重影响调试 对象的正常运行。 而r g d b 部分是通过为g d b 调试器添加逆向调试的一些命令。同时修改了 g d b 远程调试协议,与虚拟机部分进行通信,从而调用虚拟机部分的快照功能, 达到逆向调试的效果。 基于快照的实现方式,是一种粗粒度的逆向调试,可以保证在每个快照所对 应的位置上,调试对象的状态和记录时保持一致。但是,从快照继续运行到逆向 1 0 浙江大学硕士学位论文第2 章逆向调试和确定记录回放技术综述 调试的目标位置的过程,由于外部环境( 如服务器状态、键盘输入、鼠标操作等) 的变化,可能出现和原来不一致的运行状况,导致软件错误无法重现。利用确定 性记录回放技术,可以解决这个缺点,这也是本文所要实现的逆向调试系统的主 要优势。 2 2 确定性记录回放技术 随着计算机技术的发展,软件系统的并发性越来越强,带来更高的性能的同 时,也增加了软件开发,特别是软件调试的难度。由于系统的并发性、外部环境 ( 外部输入,网络、系统时问等状况) 的非确定性,导致多次运行相同的软件, 运行的路径往往不同。而某些软件错误需要在特定的执行顺序和特定的外部环境 下才会出现。基于日志的确定性记录回放技术,通过把系统的运行信息记录下来, 能够完整地重现系统的运行。在回放时,系统的运行过程和软件错误出现时的运 行过程保持完全一致,从而解决软件错误无法重现的问题。 确定性记录回放技术根据实现方式,主要可以分为以下三种:硬件支持的回 放技术、纯软件实现的回放技术和基于虚拟化技术的回放技术。 2 2 1 硬件支持的记录回放 b u g n e t 是一个通过监视和记录寄存器的修改状况来实现应用程序运行回放 的工具,记录回放的对象是应甩程序及其使用的函数库【l 7 1 。一一 b u g n e t 的结构如图2 4 所示。其中图中灰色的模块是b u g n e t 在通用的计算 机结构基础上添加特殊的硬件,用于支持确定性回放。b u g n e t 是通过检查点机制 ( 快照) 和检查点间记录系统状态变化来实现确定性记录的。每隔一个间隔( 指 定数量的指令) ,b u g n e t 就会生成一个检查点。在每个间隔的第一条指令执行前, b u g n e t 会将体系相关的状态( 包括程序计数器p c 和寄存器等) 生成一个快照写 入检查点缓冲区中,然后监视l o a d 和s t o r e 指令。如果目标进程需要读取某一内 存地址,读取的内容就会保存起来。系统回放时,就会从记录中读取保存的对应 的内容放入该地址。b u g n e t 并不会把所有l o a d 指令读取的内存内容都保存起来, 而是在保存在检查点后对每个内存地址的第一次读取的内容,这种机制用于减少 浙江大学硕士学位论文第2 章逆向调试和确定记录回放技术综述 记录带来的空间消耗。 图2 4b u g n e t 系统结构 b u g n e t 的监视对象仅仅局限为应用程序,只能对单个进程进行确定性回放, 而且记录的空间消耗较大。同时,由于记录存放在内存中,系统崩溃时记录将会 丢失。 f d r ( f l i g h td a t ar e c o r d e r ) 1 1 8 是一个支持整个系统的回放的系统。它提供 了整套硬件体系结构的支持,使得我们可以确定性回放一个系统在崩溃( c r a s h ) 前的运行状况。f d r 采用了s a f l y n e t t l 9 1 的写时拷贝检查点机制,每隔一段时间就 生成一个检查点( 快照) ,保存系统的寄存器和内存等状态。为了能够使系统可 以确定性回放,f d r 需要记录所有的中断、所有的i o 设备的输入、d m a 的传 输。这些外部输入信息是通过一个额外的独立的硬件缓冲区来保存的。另外,为 了支持多处理器系统的回放,f d r 还增加了一个额外的内存竞争缓冲区( m l m , m e m o r yr a c eb u f f e r ) 来记录所有处理器对内存访问的顺序。f d r 的空问消耗很 大,虽然记录的信息经过压缩的,但平均每秒还是需要消耗3 4 m b 的空间,对于 长时间的系统运行的回放,并没有实用价值。 硬件支持的确定性记录回放,由于需要添加新的硬件,实现难度较大。而且 由于系统的结构的变化,需要对操作系统进行对应的修改,不利于应用到系统软 1 2 浙江大学硕士学位论文第2 章逆向调试和确定记录回放技术综述 件的开发。 2 2 2 纯软件实现的记录回放 f l a s h b a c k l 2 0 是一种轻量级的回放工具,不需要硬件支持,采用纯软件方式实 现。f l a s h b a c k 记录的对象是用户级的进程。由于进程与别的进程之间的通信都是 通过系统调用和库函数来实现的,f l a s h b a c k 通过插桩的方式改变对应的系统调用 和库函数的行为,从而实现进程运行过程的记录和回放。在记录过程中,当进程 调用系统调用或者库函数时,修改过的系统调用和库函数会将返回结果记录下 来;等到同放时,进程不再调用真正的系统调用和库函数,而是直接读取记录中 的运行结果。插桩机制如图2 5 所示。 - i捅桩 + 日志 用户态进程系统调用 i 原系统调用 图2 5f l a s h b a c k 的插桩机制 f l a s h b a c k 空间开销比较小,带来的性能损耗比较低。但是,它无法重现内核 系统调用和中断的运行状况,而且需要对操作系统和作为目标的应用程序进行修 改,局限性比较大。 其他纯软件实现的确定性记录回放系统,还有用于调试分布式c c + + 程序的 l i b l o g 2 ,通过记录多进程相关顺序来实现的i n s t a n tr e p l a y 2 2 1 。这些纯软件方式 实现的确定性记录回放系统,记录的对象都局限于用户态,无法应用于系统软件。 1 3 浙江大学硕士学位论文第2 章逆向调试和确定记录回放技术综述 2 2 3 基于虚拟化技术的记录回放 如果要把确定性记录回放技术应用在整个系统上,则需要在比操作系统更底 层来获取系统运行信息。显然,纯软件的方法无法实现;而硬件支持的方法,则 实现难度比较大。虚拟化技术的引入,可以很容易地获取整个系统的运行信息。 在虚拟机系统中,客户机系统运行在v m m ( 虚拟机管理器) 之上,通过在v m m 中加入记录回放模块,可以实现对客户机系统的确定性回放。现有的比较著名的 系统有r e t r a c e 【2 3 1 、e x e c r e c o r d e r 2 4 】和r e v i r t 2 5 1 。 r e t r a c e 是一个基于v m w a r e 虚拟机的记录回放工具,可以记录和回放系统 运行的整个过程。具体应用方面,它实现了v m w a r ew o r k s t a t i o n 虚拟机1 2 6 j 所提供 的r e c o r d r e p l a y 功能。r e t r a c e 操作包括两个阶段:c a p t u r i n g 阶段和e x p a n s i o n 阶段。r e t r a c e 的c a p t u r i n g 阶段负责收集最低限度的必要信息来重现系统的运行, 务求带来的性能和空间损耗比较低;而e x p a n s i o n 阶段则根据c a p t u r i n g 阶段生成 的记录文件使得系统运行与c a p t u r i n g 阶段的运行保持完全一致。在c a p t u r i n g 阶 段,在执行每条指令时,都需要检查虚拟机的状态,记录下虚拟机的状态信息。 需要记录的信息包括处理器运行级别( c p l ) 、指令指针( i p ) 、异常和中断、通 用寄存器( e a x 、e b x 、e c x 、e d x 、e d i 、e s i 、e b p 、e s p 、e f l a g s ) 、段寄 存器( e s 、c s 、s s 、d s 、f s 、g s ) 和控制寄存器( c r 0 c r 4 ) 。 r e t r a c e 可以直接在v m w a r ew o r k s t a t i o n 的图形界面直接使用,比较方便。 但是空间消耗较大,每千条指令需要4 8 字节的空问,c a p t u r e 阶段,性能损耗为 5 左右。不过由于v m w a r ew o r k s t a t i o n 并不开源,对r e t r a c e 进行二次开发来实 现逆向调试的可能性不大【2 3 1 。 e x e c r e c o r d e r 是一个基于b o c h s 模拟器【27 】的记录回放工具,用于入侵分析和 系统恢复,可以记录和回放整个系统的运行过程。其记录回放过程的示意图如图 2 6 所示。由于基于b o c h s 模拟器,可以很方便的获取执行过的指令数,用于定 位所有非确定性事件发生的位置。系统中的非确定性事件主要包括硬件中断和输 入事件。其中,硬件中断包括了磁盘、c o m s 、键盘、鼠标、串口、并口等引起 的中断;输入事件记录的是外部输入的数据以及这些数据在什么时候可用。 1 4 浙江大学硕士学位论文 第2 章逆向调试和确定记录回放技术综述 图2 6e x e c r e c o r d e r 的记录回放不意图 由于b o c h s 是一个硬件模拟器,虚拟化带来的性能损耗比较大,e x e c r e c o r d e r 记录的总体性能损耗也比较大,而空间消耗大约是5 4 g b d x 时【2 4 1 。 通过记录完整的系统状态( 包括虚拟内存、处理器寄存器、虚拟硬盘和所有 虚拟的外部设备的存储) 以及记录所有体系上的非确定性时间。但是由于b o c h s 是一个通过硬件模拟实现的虚拟机,性能很低,使得e x e c r e c o r d e r 的实用价值不 高。 r e v i r t 是一个基于u m l ( u s e rm o d el i n u x ) 虚拟机【2 8 1 的记录回放系统,实 现了对整个系统的运行完整地重现的功能。r e v i r t 的结构如图2 7 所示。 1 5 浙江大学硕士学位论文第2 章逆向调试和确定记录回放技术综述 客户机客户机客户机 应用程序应用程序应用程序 客户机操作系统 r e v i r t 模块 宿主机操作系统 硬件 图2 7r e g i r t 结构图 r e v i r t 通过记录系统运行的不确定事件( 如外部设备输入、虚拟机时间等) 以及事件所发生的位置,来实现确定性回放功能。r e v i r t 的优点在于:空间消耗 较少( 0 2 g b 0 8 g b 天) ,记录带来的性能损耗较少( 约4 - 8 ) 1 2 8 1 。其缺点在于 u m l 虚拟机虚拟化的性能损耗比较大,记录和回放都需要从u m l 虚拟机启动开 始。 本文所实现的基于x e n 虚拟机的确定性记录回放系统参照r e v i r t 的实现方 法,在虚拟化的性能较高的x e n 虚拟机上实现,同时通过加入检查点机制来达到 局部回放的目的,从而为逆向调试系统的实现提供基础功能。 2 3 本章小结 本章介绍了针对错误无法重现和调试效率低下这两个问题的两种专门性的 调试技术:逆向调试技术和确定性记录回放技术,并详细介绍了这两种技术盼实 现方式以及实例,并指出它们在解决错误无法重现和调试效率低下这两个问题时 的局限性,进而说明研究基于虚拟机确定性回放的可逆调试技术的重要性。 1 6 浙江大学硕士学位论文第3 章基于x e n 虚拟机的记录同放系统 第3 章基于x e n 虚拟机的记录回放系统 3 1 记录回放系统的整体思路 针对x e n 的虚拟化特性【2 9 】,x e n 的超调用机制、i o 的前端驱动后端驱动架 构和事件通道等,对具体的机制加以修改,在x e n 虚拟机管理器中添加记录回放 模块,实现确定性记录回放系统。此系统可以完整地记录目标虚拟机d o m u 运行 的特权指令、系统时间更新和外部设备输入等会改变d o m u 状态的事件:在回放 时,可以根据事件记录重现目标虚拟机d o m u 的整个运行过程

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论