首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >矮小调试信息:在debug_info内部的元素中生成的附加字节

矮小调试信息:在debug_info内部的元素中生成的附加字节
EN

Stack Overflow用户
提问于 2022-01-26 11:11:59
回答 1查看 121关注 0票数 0

我正在修复解析器中的一个bug,以获取矮人调试信息(第二个侏儒版本)。在这个过程中,我做了以下奇怪的观察:

字节流是通过读取dll文件(由GNAT用ada文件创建)创建的。在这个字节流中的"DW_TAG_structure_type“位于debug_info中的位置,一个值为1的额外字节悄悄地进入了字节流。因此,FileInputStream中的所有值都被移动1字节。

.debug_info中的原始死模是这样的:

代码语言:javascript
复制
 <1><3aa824>: Abbrev Number: 129 (DW_TAG_structure_type)
    <3aa826>   DW_AT_byte_size   : 44   
    <3aa827>   DW_AT_decl_file   : 11   
    <3aa828>   DW_AT_decl_line   : 380  
    <3aa82a>   DW_AT_artificial  : 1    
    <3aa82b>   DW_AT_sibling     : <0x3aa888>

这是.debug_abbrev中相应的模具方案:

代码语言:javascript
复制
129      DW_TAG_structure_type    [has children]
    DW_AT_byte_size    DW_FORM_data1
    DW_AT_decl_file    DW_FORM_data1
    DW_AT_decl_line    DW_FORM_data2
    DW_AT_artificial   DW_FORM_flag
    DW_AT_sibling      DW_FORM_ref4
    DW_AT value: 0     DW_FORM value: 0

但是,在此时显示字节流时,将显示以下值:

代码语言:javascript
复制
Abbrev Number  >>Strange Byte<<  DW_AT_byte_size  DW_AT_decl_file
     81               01                2C              0B         ...
    (129)             ??               (44)            (11)

有人知道这个“奇怪的拜特”是怎么回事吗?

EN

回答 1

Stack Overflow用户

发布于 2022-01-26 21:34:09

虽然不太熟悉矮人,但侏儒2.0规范的内容如下(7.5.3节):

标记编码后面的是一个1字节的值,它确定使用此缩写的调试信息条目是否包含子条目。如果值为DW_CHILDREN_yes,则使用此缩写的任何调试信息条目的下一个物理继承项是前一个条目的第一个子项。如果缩写标记编码后面的1字节值是DW_CHILDREN_no,那么使用此缩写的任何调试信息条目的下一个物理继承项是前面条目的同级。..。 最后,子编码后面是一系列属性规范。..。

那么,这个“奇怪的字节”能代表DW_CHILDREN_yes吗?

我也对0x81 (129)的值感到有点困惑。规范指出,DW_TAG_structure_type的标记编码是0x13 (应该适合于一个字节),前面的引号表明,标记编码后面跟着一个不是标记编码本身的一部分的字节(如果我正确理解的话)。因此,我希望有一个0x13 0x01流(编码标记+有子条目标志)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70862534

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档