[发明专利]基于动态反编译技术的二进制应用程序调试方法有效
申请号: | 200810162529.8 | 申请日: | 2008-12-01 |
公开(公告)号: | CN101414278A | 公开(公告)日: | 2009-04-22 |
发明(设计)人: | 卜家俊;陈华;金涛;费海林;张毅超;盛其彬;罗琰;蔡晖 | 申请(专利权)人: | 浙大网新科技股份有限公司 |
主分类号: | G06F11/36 | 分类号: | G06F11/36;G06F9/45 |
代理公司: | 杭州九洲专利事务所有限公司 | 代理人: | 陈继亮 |
地址: | 310007浙江省杭*** | 国省代码: | 浙江;33 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 基于 动态 反编译 技术 二进制 应用程序 调试 方法 | ||
技术领域
本发明涉及了计算机程序的调试技术,主要是一种基于动态反编译技术的二进制应用程序调试方法。
背景技术
调试器是一种早已出现的技术,但是现有的调试器往往需要获得程序的源代码。在没有程序源代码的情况下,大多数的调试器只能展示反汇编后的汇编代码,对于调试人员而言,调试工作的效率会比较低下。一些基于更高级语言(如Java)的调试工具,利用静态的反编译工具(如Jad),也能够展示相应的源代码。但是现有静态的反编译工具对于使用相对比较低级的编程语言,如C或C++,所编写的程序的支持是不够完善的。事实上,要静态地区分程序中的数据和代码是类似于图灵机的停机问题的不可判定问题,也就是在理论上就属于无法彻底解决的问题范畴。
不过,虽然二进制程序的静态反汇编是一个无法彻底解决的问题,但是基于静态反汇编的静态反编译技术在过去的几十年中还是获得了很大的进展,不仅在理论方面有所进步,而且在开源软件和商业软件也层出不穷。不过,如前所述,静态反编译技术有其局限性,而正由于这种局限性,这样的技术并未应用于程序调试之中。
很多时候,平台软件的开发人员需要对没有源代码的程序进行调试,以确定为何平台软件对既有软件的支持不尽如人意。在这种情况下,利用动态反编译技术对二进制应用程序进行调试的方法就成为一种很重要的手段。
在动态编程语言和领域专用语言产生和兴起的今天,开发人员的开发效率被视作优先于开发出来的程序的运行效率,因为前者计入开发成本而后者可以通过硬件升级而得到改善。同样的道理,调试效率也显然是很重要的。能够将二进制程序指令动态反编译成C语言代码,可以有效帮助调试人员缩短理解代码所需要的时间,从而提高他们调试程序的效率。
发明内容
本发明的目的在于克服上述技术的缺陷,而提供一种基于动态反编译技术的二进制应用程序调试方法,使用了动态反编译的技术对二进制应用程序进行调试。
本发明的目的是通过以下技术方案来实现的。这种基于动态反编译技术的二进制应用程序调试方法,包括以下步骤:
(1).调试人员用调试器启动应用程序或指定需要调试的进程的进程号,如果由调试器启动被调试程序,则调试器记录下子进程的进程号;
(2).当执行程序至断点时,操作系统挂起被调试程序,调试器得到控制权;
(3).调试器利用操作系统提供的系统调用或应用编程接口(API)得到被调试程序现场(上下文),并得到程序计数器(PC);
(4).通过操作系统提供的应用编程接口API(如Linux的ptrace系统调用),根据程序计数器指向的地址获得程序计数器附近的指令二进制码;
(5).调试器将获得的程序二进制指令解码并进一步反编译成为C语言代码,并将代码显示给用户;
(6).根据用户指定的操作,读取寄存器或内存地址中的值,并利用反编译时的信息将其对应到C语言代码中的变量值,并显示给用户;
(7).根据用户指定的操作,在程序中添加断点,或对程序进行单步跟踪执行,当程序连续执行时,根据用户的指定,对程序进行或不进行动态反编译操作。
本发明的有益效果:本发明的方法通过利用操作系统提供的系统调用或应用编程接口(API),获得被调试程序的指令,利用动态反编译技术对指令进行反编译,并将得到的C语言代码显示给调试人员,其优势在于能够方便调试人员对二进制应用程序进行调试而不用阅读复杂难懂的汇编代码,能够有效提高调试程序的效率。
附图说明
图1本发明采用的技术方案流程图,
图2本发明的具体实施方案流程图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面结合附图及具体实施例对本发明作进一步地详细描述:
在某Linux操作系统中,对ptrace系统调用提供了支持。在该系统中,/proc/pid/exe文件是对进程号为pid的进程的可执行文件的链接,/proc/pid/maps文件中记载了进程号为pid的进程执行时,操作系统为其在内存中映射的文件名和映射到内存中的虚拟地址。被调试的程序的程序名假设为debuggedproc,调试器程序名假设为debugger。
1)用户启动debugger。用户可以指定debuggedproc的文件路径,让debugger启动新的进程进行调试,此时debugger记录下子进程的进程号pid;也可指定已开始执行的debuggedproc进程的进程号pid,让debugger依附到该进程上进行调试。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于浙大网新科技股份有限公司,未经浙大网新科技股份有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/200810162529.8/2.html,转载请声明来源钻瓜专利网。