我正在修复 DWARF 调试信息(第二个 DWARF 版本)解析器中的错误。在这个过程中,我做了以下奇怪的观察:
通过读取 dll 文件(由 GNAT 使用 ada 文件创建)来创建字节流。在此字节流内的 debug_info 中的“DW_TAG_structure_type”位置,一个值为 1 的附加字节已潜入字节流。因此 FileInputStream 中的所有值都移动了 1 个字节。
这是 .debug_info 中原始 DIE 的样子:
<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 中 DIE 的对应方案:
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
但是,当我此时显示字节流时,会显示这些值:
Abbrev Number >>Strange Byte<< DW_AT_byte_size DW_AT_decl_file
81 01 2C 0B ...
(129) ?? (44) (11)
有谁知道这个“奇怪的字节”是什么意思?