CN101414278A - 基于动态反编译技术的二进制应用程序调试方法 - Google Patents
基于动态反编译技术的二进制应用程序调试方法 Download PDFInfo
- Publication number
- CN101414278A CN101414278A CNA2008101625298A CN200810162529A CN101414278A CN 101414278 A CN101414278 A CN 101414278A CN A2008101625298 A CNA2008101625298 A CN A2008101625298A CN 200810162529 A CN200810162529 A CN 200810162529A CN 101414278 A CN101414278 A CN 101414278A
- Authority
- CN
- China
- Prior art keywords
- program
- debugger
- debugged
- user
- debugging
- 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
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明涉及一种基于动态反编译技术的二进制应用程序调试方法,调试人员用调试器启动应用程序或指定需要调试的进程的进程号,如果由调试器启动被调试程序,则调试器记录下子进程的进程号;当执行程序至断点时,操作系统挂起被调试程序,调试器得到控制权;通过利用操作系统提供的系统调用或应用编程接口(API),获得被调试程序的指令,利用动态反编译技术对指令进行反编译,并将得到的C语言代码显示给调试人员。本发明有益的效果:在于能够方便调试人员对二进制应用程序进行调试而不用阅读复杂难懂的汇编代码,能够有效提高调试程序的效率。
Description
技术领域
本发明涉及了计算机程序的调试技术,主要是一种基于动态反编译技术的二进制应用程序调试方法。
背景技术
调试器是一种早已出现的技术,但是现有的调试器往往需要获得程序的源代码。在没有程序源代码的情况下,大多数的调试器只能展示反汇编后的汇编代码,对于调试人员而言,调试工作的效率会比较低下。一些基于更高级语言(如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依附到该进程上进行调试。
2)指令获取模块。当被调试进程运行到中断点时,触发系统中断,调试器得到控制权,并得到进程上下文。此时,指令获取模块可以根据1)步骤中记录下来的进程号pid,利用操作系统提供的ptrace系统调用获得被调试程序的程序计数器(PC)。PC中记载的值即为当前正在执行的指令地址。指令获取模块有两种选择:它可以进一步用ptrace系统调用获得被调试程序正在执行的指令,以及该指令周围的指令;它也可以读取被调试程序的可执行文件,以及在/proc/pid/maps文件中记载的动态库文件,通过比较指令地址和文件映射表计算出指令在文件中的位置并读取指令;计算公式为:文件偏移=指令地址-指令所属段的映射地址+段在文件中的偏移。后一种方法一般来说效率更高。
3)指令反编译模块,将2)中获得的指令反编译成C语言代码。一般来说,指令反编译模块需要将二进制指令解码成内存中的数据结构,根据数据结构建立控制流图和数据流图,并据此建立起语法树,最后反编译成C语言代码。其中函数范围内的控制流图的建立过程为:
(a)从栈顶获得函数入口地址;
(b)从入口地址开始分析指令,生成基本块,基本块内为除分支外的指令;
(c)当检测到分支时形成另外一个基本块;
(d)根据分支的跳转地址标记标准块间的流程。
数据流图分析以控制流图为基础,可以采用基本的IN-OUT集合分析。反编译模块也有可能使用优化的方法,采用更高效的方法。反编译现有指令的方法不属于本发明的内容。反编译模块需要记录变量名和寄存器、内存地址间的关系,以便变量信息显示模块将寄存器和内存中的值转变为变量值显示给用户。一般来说,这种关系可以用哈希表或二叉树作为数据结构存储,以变量名为键,寄存器名或内存地址为值。
4)变量信息显示模块,用户看到的C语言代码中数据的展示形式是变量,直观地将变量值显示给用户,而不是直接的寄存器值和内存地址值是很有必要的。根据3)中记录的关系,变量信息显示模块可以将寄存器和内存中的值转变为变量值显示给用户。
5)程序控制模块,可以响应用户设置的断点,控制被调试程序在连续执行后在指定的指令或语句处暂停,也可以控制被调试程序进行单步执行。用户可以指定在程序连续执行时是否同时对其进行动态的反编译操作。如果对其进行动态的反编译操作,则可以获得程序的源代码;否则可以提高程序运行的速度。
使用本方法可以帮助调试人员在调试没有源代码的二进制应用程序时获得程序的源代码,从而不用分析处理复杂难懂的汇编代码,能够有效提高调试人员的工作效率。
上述实施例用来解释说明本发明,而不是对本发明进行限制,在本发明的精神和权利要求的保护范围内,对本发明作出的任何修改和改变,都落入本发明的保护范围。
Claims (1)
1.一种基于动态反编译技术的二进制应用程序调试方法,其特征在于:包括以下步骤:
(1).调试人员用调试器启动应用程序或指定需要调试的进程的进程号,如果由调试器启动被调试程序,则调试器记录下子进程的进程号;
(2).当执行程序至断点时,操作系统挂起被调试程序,调试器得到控制权;
(3).调试器利用操作系统提供的系统调用或应用编程接口得到被调试程序现场,并得到程序计数器;
(4)。通过操作系统提供的应用编程接口,根据程序计数器指向的地址获得程序计数器附近的指令二进制码;
(5).调试器将获得的程序二进制指令解码并进一步反编译成为C语言代码,并将代码显示给用户;
(6).根据用户指定的操作,读取寄存器或内存地址中的值,并利用反编译时的信息将其对应到C语言代码中的变量值,并显示给用户;
(7).根据用户指定的操作,在程序中添加断点,或对程序进行单步跟踪执行,当程序连续执行时,根据用户的指定,对程序进行或不进行动态反编译操作。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2008101625298A CN101414278B (zh) | 2008-12-01 | 2008-12-01 | 基于动态反编译技术的二进制应用程序调试方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2008101625298A CN101414278B (zh) | 2008-12-01 | 2008-12-01 | 基于动态反编译技术的二进制应用程序调试方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101414278A true CN101414278A (zh) | 2009-04-22 |
CN101414278B CN101414278B (zh) | 2010-09-15 |
Family
ID=40594816
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2008101625298A Active CN101414278B (zh) | 2008-12-01 | 2008-12-01 | 基于动态反编译技术的二进制应用程序调试方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101414278B (zh) |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101976187A (zh) * | 2010-11-16 | 2011-02-16 | 广州迪庆电子科技有限公司 | 反编译过程中的堆栈跟踪方法、装置及反编译器 |
CN103473173A (zh) * | 2013-09-10 | 2013-12-25 | 成都品果科技有限公司 | 一种对iOS系统进行汇编级动态调试的方法及装置 |
CN104252355A (zh) * | 2013-06-29 | 2014-12-31 | 北京新媒传信科技有限公司 | 一种获取Net程序集间差异信息的方法和装置 |
CN104572425A (zh) * | 2013-10-12 | 2015-04-29 | 上海海尔集成电路有限公司 | 程序调试方法、装置及系统 |
CN106778098A (zh) * | 2015-11-24 | 2017-05-31 | 中国移动通信集团公司 | 一种安卓系统应用程序的保护方法和装置 |
CN107122663A (zh) * | 2017-04-28 | 2017-09-01 | 成都梆梆信息科技有限公司 | 一种注入攻击检测方法及装置 |
CN107402799A (zh) * | 2017-07-25 | 2017-11-28 | 北京计算机技术及应用研究所 | 在x86电脑超高速解释执行tms320c25芯片汇编指令的方法 |
CN110209565A (zh) * | 2018-02-28 | 2019-09-06 | 华为软件技术有限公司 | 一种元数据模型调试方法及其装置 |
CN113947071A (zh) * | 2021-10-21 | 2022-01-18 | 北京四方继保工程技术有限公司 | 一种变电站五防文件的解析执行系统及方法 |
CN114625639A (zh) * | 2022-03-03 | 2022-06-14 | 上海先楫半导体科技有限公司 | 一种基于片上系统的调试方法、系统以及芯片 |
CN114817028A (zh) * | 2022-04-22 | 2022-07-29 | 智汇(中山)信息技术有限公司 | 一种基于软件开发平台中多目标交叉调试系统 |
CN114625639B (zh) * | 2022-03-03 | 2024-05-28 | 上海先楫半导体科技有限公司 | 一种基于片上系统的调试方法、系统以及芯片 |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10318262B2 (en) | 2015-03-25 | 2019-06-11 | Microsoft Technology Licensing, Llc | Smart hashing to reduce server memory usage in a distributed system |
-
2008
- 2008-12-01 CN CN2008101625298A patent/CN101414278B/zh active Active
Cited By (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101976187B (zh) * | 2010-11-16 | 2012-12-26 | 广州迪庆电子科技有限公司 | 反编译过程中的堆栈跟踪方法、装置及反编译器 |
CN101976187A (zh) * | 2010-11-16 | 2011-02-16 | 广州迪庆电子科技有限公司 | 反编译过程中的堆栈跟踪方法、装置及反编译器 |
CN104252355A (zh) * | 2013-06-29 | 2014-12-31 | 北京新媒传信科技有限公司 | 一种获取Net程序集间差异信息的方法和装置 |
CN104252355B (zh) * | 2013-06-29 | 2017-08-04 | 北京新媒传信科技有限公司 | 一种获取Net程序集间差异信息的方法和装置 |
CN103473173A (zh) * | 2013-09-10 | 2013-12-25 | 成都品果科技有限公司 | 一种对iOS系统进行汇编级动态调试的方法及装置 |
CN103473173B (zh) * | 2013-09-10 | 2016-03-09 | 成都品果科技有限公司 | 一种对iOS系统进行汇编级动态调试的方法及装置 |
CN104572425A (zh) * | 2013-10-12 | 2015-04-29 | 上海海尔集成电路有限公司 | 程序调试方法、装置及系统 |
CN104572425B (zh) * | 2013-10-12 | 2017-11-17 | 上海东软载波微电子有限公司 | 程序调试方法、装置及系统 |
CN106778098A (zh) * | 2015-11-24 | 2017-05-31 | 中国移动通信集团公司 | 一种安卓系统应用程序的保护方法和装置 |
CN107122663B (zh) * | 2017-04-28 | 2021-04-02 | 北京梆梆安全科技有限公司 | 一种注入攻击检测方法及装置 |
CN107122663A (zh) * | 2017-04-28 | 2017-09-01 | 成都梆梆信息科技有限公司 | 一种注入攻击检测方法及装置 |
CN107402799A (zh) * | 2017-07-25 | 2017-11-28 | 北京计算机技术及应用研究所 | 在x86电脑超高速解释执行tms320c25芯片汇编指令的方法 |
CN107402799B (zh) * | 2017-07-25 | 2020-07-21 | 北京计算机技术及应用研究所 | 在x86电脑超高速解释执行tms320c25芯片汇编指令的方法 |
CN110209565A (zh) * | 2018-02-28 | 2019-09-06 | 华为软件技术有限公司 | 一种元数据模型调试方法及其装置 |
CN110209565B (zh) * | 2018-02-28 | 2021-08-13 | 华为技术有限公司 | 一种元数据模型调试方法及其装置 |
CN113947071A (zh) * | 2021-10-21 | 2022-01-18 | 北京四方继保工程技术有限公司 | 一种变电站五防文件的解析执行系统及方法 |
CN114625639A (zh) * | 2022-03-03 | 2022-06-14 | 上海先楫半导体科技有限公司 | 一种基于片上系统的调试方法、系统以及芯片 |
CN114625639B (zh) * | 2022-03-03 | 2024-05-28 | 上海先楫半导体科技有限公司 | 一种基于片上系统的调试方法、系统以及芯片 |
CN114817028A (zh) * | 2022-04-22 | 2022-07-29 | 智汇(中山)信息技术有限公司 | 一种基于软件开发平台中多目标交叉调试系统 |
CN114817028B (zh) * | 2022-04-22 | 2023-04-14 | 陕西合友网络科技有限公司 | 一种基于软件开发平台中多目标交叉调试系统 |
Also Published As
Publication number | Publication date |
---|---|
CN101414278B (zh) | 2010-09-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101414278B (zh) | 基于动态反编译技术的二进制应用程序调试方法 | |
AU2019262864B2 (en) | Execution control with cross-level trace mapping | |
EP3161642B1 (en) | Techniques for edit-and-continue and enhanced optimized debugging on optimized code | |
US9514026B2 (en) | Debugging analysis in running multi-user systems | |
US10540262B2 (en) | Using edit and continue to dynamically set and unset optimizations in source code while debugging | |
US9459988B2 (en) | Dynamic code switching in debugging process | |
US8370810B2 (en) | Debugging device and debugging method | |
Ratabouil | Android NDK: beginner's guide | |
US20130125096A1 (en) | Systems and Methods for Dynamic Collection of Probe Call Sites | |
EP2972882B1 (en) | Javascript debugging using just my code | |
JP2004062858A (ja) | データ処理装置内のアプリケーション・コードのコンパイル | |
US20040006760A1 (en) | Generating and using profile information automatically in an integrated development environment | |
US9489286B2 (en) | Method and system for computer assisted hot-tracing mechanism | |
EP3179371A1 (en) | Method and device for non-intrusively collecting function trace data | |
CN102364433B (zh) | 在ARM处理器上实现Wine构建工具移植的方法 | |
Lacamera | Embedded Systems Architecture: Explore architectural concepts, pragmatic design patterns, and best practices to produce robust systems | |
CN105204980A (zh) | 一种虚幻引擎软件的测试方法,及测试设备 | |
Iozzo | 0-knowledge fuzzing | |
CN112162921B (zh) | 一种工业自动化测试与控制系统 | |
KR20090004210A (ko) | 통합 개발 환경을 이용한 소프트웨어 프로그램을 개발하기위한 장치 및 통합 개발 환경을 이용한 소프트웨어프로그램 개발 시스템 | |
Cormack | The rump kernel: A tool for driver development and a toolkit for applications | |
Vaduva | Learning Embedded Linux Using the Yocto Project | |
RU2390821C1 (ru) | Способ динамической инструментации | |
Lacamera | Embedded Systems Architecture: Design and write software for embedded devices to build safe and connected systems | |
JP2009064125A (ja) | サーバ装置、そのプログラム |
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 |