计算机程序除错系统及方法技术方案

技术编号:2911700 阅读:171 留言:0更新日期:2012-04-11 18:40
一种程序除错方法,该方法包括步骤:(a)将标志寄存器的追踪标志设置为“1”;(b)将需要使用的寄存器的值压入堆栈;(c)读取下一条指令的操作码并判断指令的类型;(d)若是标志出栈指令,将要储存的追踪标志设置为“1”,转到步骤(g);(e)若是控制转移指令且满足转移条件,则计算转移的起始地址及目的地址,否则直接转到步骤(g);(f)储存起始地址及目的地址;及(g)将压入堆栈的寄存器的值弹出堆栈并返回原程序。本发明专利技术还提供一种程序除错系统。本发明专利技术能够在系统模式下追踪程序的执行过程,从而实现系统模式下的程序除错。

【技术实现步骤摘要】

本专利技术涉及一种计算机程序处理系统及方法,特别是关于一种计算机程序除错系统及方法
技术介绍
程序除错的目的是了解计算机程序执行的过程,以便纠正计算机程序执行过程中出现的错误。目前Intel中央处理器提供一种除错方法,该方法利用中央处理器内部的最后分支追踪寄存器(Last Branch Trace MSR)记录计算机程序执行的过程。该最后分支追踪寄存器只适用于真实模式(real mode)、保护模式(protected mode)及虚拟86模式(V86mode)。当中央处理器在系统管理模式(System Management Mode,SMM)时,就不能利用最后分支追踪寄存器进行计算机程序的除错。
技术实现思路
鉴于以上内容,有必要提出一种系统管理模式下的计算机程序除错系统及方法。一种计算机程序除错系统,用于中央处理器工作在在系统管理模式下对原程序的执行过程进行追踪,该系统包括:追踪标志设置模块,用于将中央处理器的标志寄存器的追踪标志设置为“1”;寄存器入栈模块,用于在执行完原程序的一条指令后将除错过程中需要使用的寄存器的值压入堆栈;操作码读取模块,用于读取原程序的下一条指令的操作码并判断该下一条指令的类型;标志出栈处理模块,用于当原程序的下一条指令是标志出栈指令时,将该标志出栈指令将要储存的追踪标志设置为“1”;转移处理模块,用于当原程序的下一条指令是控制转移指令并满足转移条件时,计算转移的起始地址及目的地址,并储存该起始地址及目的地址;及寄存器出栈模块,用于将压入堆栈的寄存器的值弹出堆栈并返回原程序。一种计算机程序除错方法,用于中央处理器工作在系统管理模式下对原程序的执行过程进行追踪,该方法包括步骤:(a)将中央处理器的标志寄存器的追踪标志设置为“1”;(b)在执行完原程序的一条指令后将除错过程中需要使用的寄存器的值压入堆栈;(c)读取原程序的下一条指令的操作码并根据该操作码判断该下一条指令的类型;(d)若原程序的下一条指令是标志出栈指令,则将该标志出栈指令要储存的追踪标志设置为“1”,转到步骤(g);(e)若原程序的下一条指令是控制转移指令且满足转移条件,则计算转移的起始地址及目的地址,否则直接转到步骤(g);(f)储存所述起始地址及目的地址;及(g)将压入堆栈的寄存-->器的值弹出堆栈并返回原程序。本专利技术涉及的计算机程序除错系统及方法,其利用第1号中断及通过分支追踪方法记录程序的执行过程,从而实现了在系统管理模式下的计算机程序除错。附图说明图1为本专利技术程序除错系统的运行环境示意图。图2为本专利技术程序除错系统的分支追踪方法示意图。图3为本专利技术程序除错系统较佳实施例的功能模块图。图4为本专利技术程序除错方法较佳实施例的流程图。图5为堆栈中的标志寄存器、中断返回地址的示意图。图6为堆栈中的调用返回地址、标志寄存器及中断返回地址的示意图。图7为堆栈中的调用返回地址、标志寄存器、中断返回地址及其他寄存器的示意图。图8为条件短转移指令、条件近转移指令的机器码、操作码、助记符、转移条件及对应的目的地址、起始地址的示意图。图9为无条件短转移指令、无条件近转移指令、无条件远转移指令、近调用指令、远调用指令、近返回指令、远返回指令的机器码、操作码、助记符、转移条件及对应的目的地址、起始地址的示意图。具体实施方式如图1所示,是本专利技术计算机程序除错系统的运行环境示意图。该计算机程序除错系统11运行在计算机1上,当计算机1中的中央处理器(CPU,在图中未画出)工作在系统管理模式下时,计算机程序除错系统11对计算机1上运行的原程序12的执行过程进行追踪。CPU内部有多个寄存器,如标志寄存器(Flags)、代码段寄存器(CS)、指令指针寄存器(IP)、计数寄存器(CX)(在图中均未画出)。所述计算机程序除错系统11利用第1号中断(INT1)追踪原程序12的执行过程。当CPU工作在系统管理模式下并设定Flags的追踪标志(Trace Flag,TF)为“1”时,CPU按单步方式运行原程序12,每执行完一条指令就会产生INT1,并执行INT1中断处理程序,当INT1中断处理程序执行结束后,再返回原程序12执行下一条指令。在INT1中断处理程序中记录原程序12的执行过程,即实现原程序12的除错。控制转移指令通过修改CS和IP的值,使原程序12的执行顺序发生转移。当CPU执行控制转移指令并且满足转移条件时,程序的执行顺序将发生转移。分支追踪方法通过记录原程序12发生转移之前的地址(以下简称起始地址)与发生转移之后的地址(以下简称目的地址)-->来对原程序12进行追踪。采用分支追踪方法能够提高计算机程序除错的效率。控制转移指令将原程序12分割为许多小的区块,起始地址为离开一个区块的地址,目的地址为进入下一个区块的地址,根据所记录的起始地址与目的地址可以推断出原程序12完整的执行过程。如图2所示,假设原程序12从01000010h开始执行,执行到01000029h发生第一次转移,转移至01000050h,执行到01000070h发生第二次转移,转移至01000082h,执行至01000092h结束,则第一次转移的起始地址是01000029h,目的地址是01000050h,第二次转移的起始地址是01000070h,目的地址是01000082h。由两次转移的起始地址和目的地址,可知原程序12的执行过程是01000010h~01000029h(即第一个区块),01000050h~01000070h(即第二个区块),01000082h~01000092h(即第三个区块)。在本实施例中用h表示十六进制数,例如01000010h、01000029h分别表示十六进制数01000010、01000029。如图3所示,是本专利技术计算机程序除错系统较佳实施例的功能模块图。所述计算机程序除错系统11包括追踪标志设置模块110、寄存器入栈模块111、操作码读取模块112、标志出栈处理模块113、转移处理模块114、辅助除错模块115及寄存器出栈模块116。追踪标志设置模块110用于将Flags的TF标志设置为“1”。当TF=1时,CPU按单步方式运行原程序12,每执行完一条指令就会产生INT1。寄存器入栈模块111用于在执行完原程序12的一条指令进入INT1中断处理程序时,将除错过程中需要使用的寄存器的值压入堆栈。将寄存器的值压入堆栈一方面是为了保护中断现场,使得在返回原程序12时将寄存器恢复到INT1前的值,继续执行原程序12的下一条指令;另一方面可以通过寄存器的值进行辅助除错,例如检查计数寄存器CX的值是否正常。操作码读取模块112用于读取下一条指令的操作码并根据该操作码判断下一条指令的类型。通过指令的机器码能够判断该指令的类型,如指令C3(十六进制)代表远返回指令。标志出栈处理模块113用于当下一条指令是标志出栈指令(POPF)时,将标志出栈指令要储存的TF标志设置为“1”。转移处理模块114用于当下一条指令是控制转移指令且满足转移条件时,计算转移的起始地址和目的地址。辅助除错模块115用于对原程序12进行其他的除错检测,即除了追踪原程序12的执行过程,检测其他的错误,例如检查计数寄存器CX的值是否不正常。寄存器出栈模块116用于将进入INT1中断处本文档来自技高网...

【技术保护点】
一种计算机程序除错系统,用于中央处理器工作在在系统管理模式下对原程序的执行过程进行追踪,其特征在于,该系统包括: 追踪标志设置模块,用于将中央处理器的标志寄存器的追踪标志设置为“1”; 寄存器入栈模块,用于在执行完原程序的一条指 令后将除错过程中需要使用的寄存器的值压入堆栈; 操作码读取模块,用于读取原程序的下一条指令的操作码并判断该下一条指令的类型; 标志出栈处理模块,用于当原程序的下一条指令是标志出栈指令时,将该标志出栈指令将要储存的追踪标志设置为“ 1”; 转移处理模块,用于当原程序的下一条指令是控制转移指令并满足转移条件时,计算转移的起始地址及目的地址,并储存该起始地址及目的地址;及 寄存器出栈模块,用于将压入堆栈的寄存器的值弹出堆栈并返回原程序。

【技术特征摘要】
【权利要求1】一种计算机程序除错系统,用于中央处理器工作在在系统管理模式下对原程序的执行过程进行追踪,其特征在于,该系统包括:追踪标志设置模块,用于将中央处理器的标志寄存器的追踪标志设置为“1”;寄存器入栈模块,用于在执行完原程序的一条指令后将除错过程中需要使用的寄存器的值压入堆栈;操作码读取模块,用于读取原程序的下一条指令的操作码并判断该下一条指令的类型;标志出栈处理模块,用于当原程序的下一条指令是标志出栈指令时,将该标志出栈指令将要储存的追踪标志设置为“1”;转移处理模块,用于当原程序的下一条指令是控制转移指令并满足转移条件时,计算转移的起始地址及目的地址,并储存该起始地址及目的地址;及寄存器出栈模块,用于将压入堆栈的寄存器的值弹出堆栈并返回原程序。【权利要求2】如权利要求1所述的计算机程序除错系统,其特征在于,该系统还包括辅助除错模块,用于对原程序进行追踪原程序的执行过程以外的错误检测。【权利要求3】如权利要求1所述的计算机程序除错系统,其特征在于,所述除错过程中需要使用的寄存器包括计数寄存器、标志寄存器、代码段寄存器及指令指针寄存器。【权利要求4】如权利要求1所述的计算机程序除错系统,其特征在于,所述控制转移指令包括条件短转移指令、无条件短转移指令、条件近转移指令、无条件近转移指令、无条件远转移指令、近调用指令、远调用指令、近返回指令及远返回指令。【权利要求5】如权利要求1所述的计算机程序除错系统,其特征在于,所述起始地址及目的地址是存储在内存的环形缓冲区中。【权利要求6】一种计算机程序除错方法,用于中央处理器工作在系统管理模式下对原程序的执行过程进行追踪,其特征在于,该方法包括步骤:(a)将中央处理器的标志寄存器的追踪标志设置为“1”;(b)在执行完原程序的一条指令后将除错过程中需要使用的寄存器的值压入堆栈;(c)读取原程序的下一条指令的操作码并根据该操作码判断该下一条指令的类型;(d)若原程序的下一条指令是标志出栈指令,则将该标志出栈指令要储存的追踪标志设置为“1”,转到步骤(g);(e)若原程序的下一条指令是控制转移指令且满足转移条件,则计算转移的起始地址及目的地址,否则直接转到步骤(g);(f)储存所述起始地址及目的地址;及(g)将压入堆栈的寄存器的值弹出堆栈并返回原程序。【权利要求7】如权利要求6所述的计算机程序除错方法,其特征在于,所述步骤(f)与(g)之间包括步骤:对原程序进行追踪原程序的执行过程以外的错误检测。【权利要求8】如权利要求6所述的计算机程序除错方法,其特征在于,所述步骤(b)中压入堆栈的寄存器的值包括中断返回的段地址及中断返回的偏移地址,用INT_CS表示中断返回的段地址,用INT_IP表示中断返回的偏移地址,在步骤(e)中:若下一条指令是条件短转移指令并且满足转移条件,则转移的起始地址是INT_CS*10h+INT_IP,目的地址是INT_CS*10h+(INT_IP+(rel8+2)&FFh),其中...

【专利技术属性】
技术研发人员:赖庆育
申请(专利权)人:鸿富锦精密工业深圳有限公司鸿海精密工业股份有限公司
类型:发明
国别省市:94[中国|深圳]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1