背景:最近想在自己写的一个工具里dump任意的结构体数据,类似于gdb中,可以打印出结构体的格式和值, 但是发现普通的方式无法完成。那么就想到gdb是怎么做到的呢, 原来涉及到-g选项中增加的那些调试信息数据,所以就想开始分析ELF格式文件,然后就了解到DWARF格式的标准调试信息格式。还在入门中,这是一些初级的心得记录下。
dwarf标准网站: Dwarf Home
推荐一篇文章 《DWARF详解》 地址: DWARF详解 - LLVM中文网, 其中对阅读DWARF4标准给出了导读提示,对于英文不好的同学,可以重点看下。
还有一篇文章写的也挺好,将基本的数据组织方式图形化表述了,即值存在在一起,对值的描述存储在一个节中。DWARF 中的 Debug Info 格式 - twoon - 博客园
其中标准的综述部分说明, 2-6节描述了DIE的结构关系,在第七节给出了debug信息的编码定义和方式。
因为同时看了ELF格式的标准和DWARF的格式标准, ELF在网上有中文的翻译版本,而且其前面即给出了具体的数据编码定义,例如elf的头信息在32位和64位具体如何定义,怎么查找节section和每种节的具体类型,偏移等。
而dwarf的标准,前面讲述的大多是DIE之间的关系,没有具体的编码定义,所以需要认真的阅读,才能理解。再去看后面第7节的数据定义,否则即使直接看第7节,依然无法看出全貌。
感叹:为啥信息行业老美牛,人家在80年代就开始搞标准,为了推广商业,搞一批人搞标准,现在我们只能按照这些标准来,内容都是大家可以理解的,但是语言是一大障碍。如果是中文写的,我想阅读,理解和实现起来难度也不会太大。