一种反汇编结果的处理方法和装置制造方法

文档序号:6518861阅读:89来源:国知局
一种反汇编结果的处理方法和装置制造方法
【专利摘要】本发明公开了一种反汇编结果的处理方法和装置,其中所述方法包括:获得反汇编指令的输出结果后,分析所述反汇编指令的输出结果,获得输出结果中的标志性参数,且根据所述标志性参数将输出结果划分成模块,并将各模块绘制成模块图,根据所述模块图将反汇编结果以图形界面显示。本发明使得调试器的反汇编结果能够以图形化的方式显示出来,从而让调试人员能够直观的观察到代码的执行流程,在逻辑上更加清楚直观,提高了软件调试程序的效率。
【专利说明】一种反汇编结果的处理方法和装置
【技术领域】
[0001]本发明涉及计算机科学【技术领域】,具体涉及一种反汇编结果的处理方法和装置。【背景技术】
[0002]随着软件系统规模的增大,调试器也变得越来越重要,这是因为开发人员需要通过调试器来调试软件系统的各个版本。
[0003]Windbg是微软发布的一款功能强大的动态调试器,能够查看软件运行中的信息,这些信息包含但不限制于,例如:可以是当前线程的寄存器信息,堆栈信息、内存信息和当前企业信息门户附近的反汇编信息等等。
[0004]但是,Windbg的反汇编结果是以文本形式显示出来的,调试人员从大量文本形式信息中提取有用信息时费事、费力,因此降低了 Windbg调试程序的效率。因此,如何提高软件调试的效率是一个急需解决的问题。

【发明内容】

[0005]有鉴于此,本发明实施例提供一种反汇编结果的处理方法和装置,来解决软件调试过程中调试效率低的问题。
[0006]一方面,本发明实施例提供了一种反汇编结果的处理方法,用于具有反汇编功能的调试器中,所述方法包括:
[0007]获得反汇编指令的输出结果;
[0008]分析所述反汇编指令的输出结果,获得输出结果中的标志性参数,且根据所述标志性参数将输出结果划分成模块,并将各模块绘制成模块图;
[0009]根据所述模块图将反汇编结果以图形界面显示。
[0010]进一步地,获得反汇编指令的输出结果包括:
[0011]根据调试器中的软件开发工具包编写动态链接库并注入到调试进程中,其中,所述软件开发工具包包括应用程序接口 ;
[0012]根据所述应用程序接口获得反汇编指令的输出结果。
[0013]进一步地,所述分析所述反汇编指令的输出结果,获得输出结果中的标志性参数,且根据所述标志性参数将输出结果划分成模块,并将各模块绘制成模块图包括:
[0014]分析所述反汇编指令的输出结果,获得跳转指令;
[0015]根据所述跳转指令将反汇编指令的输出结果分成至少一个模块,并根据跳转指令的顺序将各模块构成模块图。
[0016]另一方面,本发明实施例提供了一种反汇编结果的处理装置,用于具有反汇编功能的调试器中,所述装置包括:
[0017]反汇编指令获取单元,用于获得反汇编指令的输出结果;
[0018]模块图单元,用于分析所述反汇编指令的输出结果,获得输出结果中的标志性参数,且根据所述标志性参数将输出结果划分成模块,并将各模块绘制成模块图;[0019]显示单元,用于根据所述模块图将反汇编结果以图形界面显示。
[0020]进一步地,所述反汇编指令获取单元包括:
[0021]注入子单元,用于根据调试器中的软件开发工具包编写动态链接库并注入到调试进程中,其中,所述软件开发工具包包括应用程序接口 ;
[0022]获取子单元,用于根据所述应用程序接口获得反汇编指令的输出结果。
[0023]进一步地,所述模块图单元包括:
[0024]跳转指令获取子单元,用于分析所述反汇编指令的输出结果,获得跳转指令;
[0025]模块图子单元,用于根据所述跳转指令将反汇编指令的输出结果分成至少一个模块,并根据跳转指令的顺序将各模块构成模块图。
[0026]本发明通过将反汇编指令的输出结果构造成模块图,由此使得调试器的反汇编结果能够以图形化的方式显示出来,从而让反汇编结果在逻辑上更加清楚,调试人员能够直观的观察到代码的执行流程,提高了软件调试程序的效率。
【专利附图】

【附图说明】
[0027]下面将通过参照附图详细描述本发明的示例性实施例,使本领域的普通技术人员更清楚本发明的上述及其他特征和优点,附图中:
[0028]图1是本发明第一实施例的反汇编结果的处理方法流程图;
[0029]图2是本发明第二实施例的反汇编结果的处理方法流程图;
[0030]图3是本发明第三实施例的反汇编结果的处理装置结构图;
[0031]图4是本发明第四实施例的反汇编结果的处理装置结构图。
【具体实施方式】
[0032]下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部内容。
[0033]在图1中示出了本发明的第一实施例。
[0034]图1为根据本发明第一实施例的反汇编结果的处理方法实现流程,该方法可适用于具有反汇编功能的调试器中,该实现流程详述如下:
[0035]步骤110、获得反汇编指令的输出结果。
[0036]本步骤优选是根据调试器中的软件开发工具包编写动态链接库并注入到调试进程中,其中,所述软件开发工具包包括应用程序接口,根据所述应用程序接口获得反汇编指令的输出结果。
[0037]所述软件开发工具包可以简单地为预设程序设计语言提供应用程序接口(Application Programming Interface,简称API),所述应用程序接口是一组定义、程序及协议的集合,通过应用程序接口实现计算机软件之间的相互通信。应用程序接口的一个主要功能是提供通用功能集,属于一种操作系统或程序接口,所述应用程序接口函数包含在位于系统目录下的动态链接库文件中,是一些预先定义的函数,目的是提供应用程序与开发人员基于软件或硬件的以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。[0038]所述动态链接库(Dynamic Link Library,简称DLL)是一个包含可由多个程序同时使用的代码和数据的库。动态链接提供了一种方法,使进程可以调用不属于其可执行代码的函数。函数的可执行代码位于一个动态链接库中,该动态链接库包含一个或多个已被编译、链接并与使用它们的进程分开存储的函数,动态链接库是一个包含可由多个程序同时使用的代码和数据的库。
[0039]上述步骤,通过编写动态链接库注入到调试进程中,利用软件开发工具包提供的应用程序接口,能够从调试汇编过程中获得反汇编指令的输出结果。
[0040]步骤120、分析所述反汇编指令的输出结果,获得输出结果中的标志性参数,且根据所述标志性参数将输出结果划分成模块,并将各模块绘制成模块图。
[0041]在本实施例中,标志性参数是输出结果中能体现反汇编指令逻辑关联的一类或几类参数,通常可以基于绘图显示需求、经验来预先设定需要提取哪些标志性参数。例如,需要将与某一类指令进行绘图,则可以提取指示这类指令的参数作为标志性参数,将标志性参数对应的指令提取成为模块以便绘图。优选是采用跳转指令作为标志性参数,以便体现指令的执行顺序,下述实施例将进行详细说明。其中,所述模块图可以是各模块构成的流程图或逻辑关系图。
[0042]步骤130、根据所述模块图将反汇编结果以图形界面显示。
[0043]在本实施例中,可以通过图形设备接口(Graphics Device Interface,简称⑶I)将反汇编结果以图形界面显示出来。所述图形设备接口是由许多函数组成的图形输出接口,负责系统与绘图程序之间的信息交换,处理系统程序图形的输出,它是操作系统图形显示程序与实际物理设备之间的桥梁,GDI得用户无需关心具体设备的细节,而只需在一个虚拟的环境(即逻辑设备)中进行操作。GDI根据绘制成的模块图,将所述模块图映射到物理设备上,即GDI根据所述模块图将反汇编结果以图形界面的形式显示出来。
[0044]本实施例提供的反汇编结果图形化显示的方法,通过获得反汇编指令的输出结果,分析所述反汇编指令的输出结果,获得输出结果中的标志性参数,且根据所述标志性参数将输出结果划分成模块,并将各模块绘制成模块图,根据所述模块图将反汇编结果以图形界面显示。由此使得调试器的反汇编结果能够以图形化的方式显示出来,从而让反汇编结果在逻辑上更加清楚,调试人员能够直观的观察到代码的执行流程,提高了软件调试程序的效率。
[0045]在图2中示出了本发明的第二实施例。
[0046]图2为根据本发明第二实施例的反汇编结果的处理方法实现流程,该方法可适用于具有反汇编功能的调试器中,以前述实施例为基础,对部分步骤进行了可选的优化。该实现流程详述如下:
[0047]步骤210、根据调试器中的软件开发工具包编写动态链接库并注入到调试进程中,其中,所述软件开发工具包包括应用程序接口。
[0048]在本实施例中,通过调试器中的软件开发工具包(Software Development Kit,简称SDK)编写动态链接库,所述动态链接库编写时所采用的语言优选可以是C++语言。
[0049]本领域的技术人员可以理解,所有现有的软件开发工具包编写动态链接库的程序编写语言都可以用于本发明实施例,本实施例的软件开发工具包在编写动态链接库时所使用的C++语言只是本实施例的优选实施例,并不限制于本发明。[0050]步骤220、根据所述应用程序接口获得反汇编指令的输出结果。
[0051]步骤230、分析所述反汇编指令的输出结果,获得跳转指令。
[0052]本步骤中,可以按照预设规则从输出结果中提取跳转指令,例如“jmp”和“jne”等标志性指令。
[0053]步骤240、根据所述跳转指令将反汇编指令的输出结果分成至少一个模块,并根据跳转指令的顺序将各模块构成模块图。
[0054]在本实施例中,动态链接库在获得反汇编指令后,对所述反汇编指令的输出结果进行分析,根据分析结果,获得跳转指令,所述跳转指令是将用户的请求从一个页面传递到另一个页面,从而将反汇编结果显示出来。在现有技术中,具有反汇编功能的调试器调试出来的反汇编结果一般以文本的形式显示出来,以文本方式显示出来的反汇编结果只能以“瀑布方式”从上到下逐条显示,程序员需要逐条分析所述跳转指令。因此,这种反汇编显示结果程序员分析起来效率低下,不利于对反汇编程序的调试。然而,在本实施例中,所述跳转指令包括至少一条条件跳转指令,根据所述跳转指令,将反汇编指令的输出结果分成至少一个模块,并根据跳转指令的顺序将各模块构成模块图。则程序员浏览指令的方式更加直观。
[0055]步骤250、根据所述模块图将反汇编结果以图形界面显示。
[0056]在本步骤中,根据所述反汇编指令输出结果构成的模块图,可以使用图形设备接口将反汇编结果以图形形式显示出来。使得调试人员能够清楚的看到程序的执行过程,在逻辑关系上也更加清楚直观,因此,有利于反汇编程序调试效率的提高。
[0057]在图3中示出了本发明的第三实施例。
[0058]图3为根据本发明第三实施例的反汇编结果的处理装置结构图。该装置可适用于具有反汇编功能的调试器中,如图3所示,本实施例所述的反汇编结果的处理装置包括:反汇编指令获取单元31、模块图单元32和显示单元33。
[0059]其中,所述反汇编指令获取单元31用于获得反汇编指令的输出结果。
[0060]所述模块图单元32用于分析所述反汇编指令的输出结果,获得输出结果中的标志性参数,且根据所述标志性参数将输出结果划分成模块,并将各模块绘制成模块图。
[0061]所述显示单元33用于根据所述模块图将反汇编结果以图形界面显示。
[0062]在本实施例中,所述图形显示单元33根据所述反汇编结果构成的模块图,优选的可使用图形设备接口将反汇编结果以图形形式显示出来。
[0063]本实施例提供的反汇编结果处理的装置,使得调试器的反汇编结果能够以图像的形式显示出来,从而使得反汇编结果更加清楚直观,提高反汇编程序调试的效率。
[0064]在图4中示出了本发明的第四实施例。
[0065]图4为根据本发明第四实施例的反汇编结果的处理装置结构图。该装置可适用于具有反汇编功能的调试器中,如图4所示,本实施例所述的反汇编结果的处理装置包括:反汇编指令获取单元41、模块图单元42和显示单元43。
[0066]其中,所述反汇编指令获取单元41用于获得反汇编指令的输出结果。
[0067]所述模块图单元42用于分析所述反汇编指令的输出结果,获得输出结果中的标志性参数,且根据所述标志性参数将输出结果划分成模块,并将各模块绘制成模块图。
[0068]所述显示单元43用于根据所述模块图将反汇编结果以图形界面显示。[0069]具体地,可以使用图形设备接口将反汇编结果以图形形式显示出来,使得调试人员能够清楚的看到程序的执行过程,在逻辑关系上也更加清楚直观,因此,有利于反汇编程序调试效率的提闻。
[0070]在第四实施例中,所述反汇编指令获取单元41包括:注入子单元411和获取子单元 412。
[0071]所述注入子单元411用于根据调试器中的软件开发工具包编写动态链接库并注入到调试进程中,其中,所述软件开发工具包包括应用程序接口。
[0072]在本实施例中,使用调试器中的软件开发工具包来编写动态链接库,优选的所述动态链接库编写时所采用的语言为C++。
[0073]本领域的技术人员可以理解,所有现有的软件开发工具包编写动态链接库的编写语言都可以用于本发明实施例,本实施例的软件开发工具包在编写动态链接库时所使用的C++语言只是本实施例的优选实施例,并不限制于本发明。
[0074]所述获取子单元412用于根据所述应用程序接口获得反汇编指令的输出结果。
[0075]所述软件开发工具包可以简单的为预设程序设计语言提供应用程序接口,所述应用程序接口是一组定义、程序及协议的集合,通过应用程序接口实现计算机软件之间的相互通信,在本实施例中,获取子单元412根据调试器中软件开发工具包的应用程序接口,能够获得反汇编指令的输出结果。
[0076]在第四实施例中,所述模块图单元42可以包括:跳转指令获取子单元421和模块图子单元422。
[0077]所述跳转指令获取子单元421用于分析所述反汇编指令的输出结果,获得跳转指令。
[0078]所述模块图子单元422用于根据所述跳转指令将反汇编指令的输出结果分成至少一个模块,并根据跳转指令的顺序将各模块构成模块图。
[0079]本发明实施例提供的反汇编结果的处理方法和装置,通过获得反汇编指令的输出结果,对所述反汇编指令的输出结果进行分析后,获得输出结果中的标志性参数,且根据所述标志性参数将输出结果划分成模块,并将各模块绘制成模块图,根据所述模块图将反汇编结果以图形界面显示。由此使得调试器的反汇编结果能够以图形的方式显示出来,使得反汇编结果在逻辑上更加清楚直观,程序员能够清楚的看到代码的执行流程,从而提高反汇编程序调试的效率。
[0080]显然,本领域技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个计算装置上,或者分布在多个计算装置所组成的网络上,可选地,他们可以用计算机装置可执行的程序代码来实现,从而可以将它们存储在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件的结合。
[0081]以上所述仅为本发明的优选实施例,并不用于限制本发明,对于本领域技术人员而言,本发明可以有各种改动和变化。凡在本发明的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
【权利要求】
1.一种反汇编结果的处理方法,用于具有反汇编功能的调试器中,其特征在于,所述方法包括: 获得反汇编指令的输出结果; 分析所述反汇编指令的输出结果,获得输出结果中的标志性参数,且根据所述标志性参数将输出结果划分成模块,并将各模块绘制成模块图; 根据所述模块图将反汇编结果以图形界面显示。
2.根据权利要求1所述的反汇编结果图形化显示的方法,其特征在于,获得反汇编指令的输出结果包括: 根据调试器中的软件开发工具包编写动态链接库并注入到调试进程中,其中,所述软件开发工具包包括应用程序接口; 根据所述应用程序接口获得反汇编指令的输出结果。
3.根据权利要求1所述的反汇编结果的处理方法,其特征在于,所述分析所述反汇编指令的输出结果,获得输出结果中的标志性参数,且根据所述标志性参数将输出结果划分成模块,并将各模块绘制成模块图包括: 分析所述反汇编指令的输出结果,获得跳转指令; 根据所述跳转指令将反汇编指令的输出结果分成至少一个模块,并根据跳转指令的顺序将各模块构成模块图。
4.一种反汇编结果的处理装置,用于具有反汇编功能的调试器中,其特征在于,所述装置包括: 反汇编指令获取单元,用于获得反汇编指令的输出结果; 模块图单元,用于分析所述反汇编指令的输出结果,获得输出结果中的标志性参数,且根据所述标志性参数将输出结果划分成模块,并将各模块绘制成模块图; 显示单元,用于根据所述模块图将反汇编结果以图形界面显示。
5.根据权利要求4所述的反汇编结果的处理装置,其特征在于,所述反汇编指令获取单元包括: 注入子单元,用于根据调试器中的软件开发工具包编写动态链接库并注入到调试进程中,其中,所述软件开发工具包包括应用程序接口 ; 获取子单元,用于根据所述应用程序接口获得反汇编指令的输出结果。
6.根据权利要求4所述的反汇编结果的处理装置,其特征在于,所述模块图单元包括: 跳转指令获取子单元,用于分析所述反汇编指令的输出结果,获得跳转指令; 模块图子单元,用于根据所述跳转指令将反汇编指令的输出结果分成至少一个模块,并根据跳转指令的顺序将各模块构成模块图。
【文档编号】G06F11/36GK103577327SQ201310565553
【公开日】2014年2月12日 申请日期:2013年11月13日 优先权日:2013年11月13日
【发明者】高思龙 申请人:北京像素软件科技股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1