in pkg/tools/elf/dwarf_init.go [220:258]
func (r *DwarfReader) getStructureFields(data *dwarf.Data, entry *dwarf.Entry) ([]*StructureFieldInfo, error) {
reader := data.Reader()
reader.Seek(entry.Offset)
_, err := reader.Next()
if err != nil {
return nil, err
}
res := make([]*StructureFieldInfo, 0)
for {
child, err := reader.Next()
if err != nil {
return nil, err
}
if child == nil || child.Tag == 0 {
break
}
if child.Tag != dwarf.TagMember {
continue
}
name, ok := child.Val(dwarf.AttrName).(string)
if !ok {
continue
}
offset, ok := child.Val(dwarf.AttrDataMemberLoc).(int64)
if !ok {
continue
}
field := &StructureFieldInfo{
Name: name,
Offset: offset,
}
res = append(res, field)
}
return res, nil
}