DWARF调试信息解析的方法的研究.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
DWARF调试信息解析的方法的研究

DWARF调试信息解析的方法的研究   摘 要   调试信息是指编译器在程序编译过程中生成的供上层调试器使用的信息。DWARF调试信息格式是一种在类Unix操作系统中广泛使用的调试信息格式。本文对如何从目标文件中获取调试信息,以及如何解析DWARF调试信息进行了初步的分析和研究。   【关键词】DWARF 调试信息 ELF 解析   调试信息是指用来描述某种编程语言的源代码与目标代码之间关系的信息,包括源代码中的变量信息、数据类型信息、常量信息、子程序信息等。调试信息只能由编译器产生,通常供上层调试器使用,也可以帮助程序员或调试人员进行程序调试。现代调试信息可以存储足够多的信息来支持源代码级别的调试。   调试信息格式是指调试信息中存储各种关于已编译程序信息的格式。目前比较常见的调试信息格式包括stabs、COFF、PE/COFF、OMF、IEEE-695、DWARF等。了解调试信息的格式有助于理解调试器的工作原理并进行改进。本文主要对应用最广泛的DWARF调试信息格式的解析进行初步研究。   调试信息通常存储于目标二进制代码中,但也可以单独存储于独立文件中。当调试信息包含在目标文件中时,我们要解析DWARF调试信息首先需要里了解目标文件的格式。常见的目标文件格式包括a.out、COFF、ECOFF、XCOFF、ELF、PE、PEF等。本文主要介绍在类Unix操作系统中广泛应用的ELF目标文件格式。   1 ELF目标文件格式   ELF文件格式(Executable and Linkable Format),即“可执行可链接格式”,是一种通用的可执行文件、可重定位文件、共享目标文件和内核转储的标准文件格式,具有这种格式的文件我们称为ELF文件。ELF的最大特点在于具有比较广泛的适用性,它定义了一种不依赖于任何特定的处理器或架构的通用二进制接口,可以平滑地移植到多种不同的操作环境上。   ELF文件格式规范[27]由TIS(Tool Interface Standards,工具接口标准)委员会制定。ELF规范中把ELF文件宽泛地称为“目标文件(object file))”,这与我们平时的理解不同。一般地,我们把经过编译但没有链接的文件(比如Unix/Linux上的.o文件)称为目标文件;而在ELF规范中,所有符合ELF格式规范的都称为ELF文件,也称为目标文件,这两个名字是相同的;经过编译但没有链接的文件称为“relocatable file”,即“可重定位文件”或“待重定位文件”。本文采用与ELF规范相同的命名方式,提到的目标文件时,即指各种类型的ELF文件。   ELF目标文件格式提供了两种并行视图,分别从程序链接和程序执行两种需求角度来描述文件整体结构,如表1所示。   文件开始处是一个“ELF头部(ELF Header)”,用来描述整个文件的结构信息。   “程序头部表(program header table)”对于链接视图是可选的,对于运行视图是必须的,因为它的作用是告诉系统如何创建进程镜像。   “节区(Section)”是专用于链接过程而言的,每个节区包含指令、数据、符号表、重定位数据等信息。有一些包含程序和控制信息的特殊节区是专门为操作系统使用的。调试信息通常包含于名称以“.debug”开头的特殊节区中。   “节区头部表(section header table))”包含了各个节区的描述信息,例如节区名称、节区大小等。在链接视图中,节区头部表示必须存在的。   需要说明的是,在实际的文件中,程序头部表、节区、节区头部表、段之间的顺序并不一定如图4-1所描述的顺序。只有ELF头部的位置是固定的,其它内容的位置全都可变。   关于ELF文件格式的详细信息可以查阅参考文献[1]。   2 DWARF调试信息格式   DWARF是一种广泛使用的、标准化的调试信息格式;最初和ELF一起设计而来,但是独立于ELF,也可以用于其它目标文件格式。它具有很强的扩展性,适用于几乎所有CPU架构下的各种编程语言。   DWARF最初起源于Unix系统(Unix System V Release 4 (SVR4))的C编译器和sdb调试器项目,1989年正式发布DWARF 1标准文档。DWARF 2由于种种原因只在1990年发布了一个草案标准,没能形成正式标准。2006年发布DWARF 3标准。2010年发布了DWARF 4标准。   DWARF对于调试信息采用结构化的描述方法,总体上是一个树形结构;调试信息单元(Debugging Information Entry,DIE)是构成整个结构的基本单位。DIE可以分为两种类型,一种是用于描述数据和数据结构的;另外一种是用于描述函数及其它可

文档评论(0)

317960162 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档