dwarf

package
v1.25.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 5, 2025 License: MIT Imports: 2 Imported by: 0

Documentation

Overview

dwarfパッケージは、実行可能ファイルからロードされたDWARFデバッグ情報へのアクセスを提供します。 これは、DWARF 2.0標準で定義されています。 http://dwarfstd.org/doc/dwarf-2.0.0.pdf

セキュリティ

このパッケージは、敵対的な入力に対して強化されていないため、https://go.dev/security/policy の範囲外です。 特に、オブジェクトファイルを解析する際には基本的な検証しか行われません。 そのため、信頼できない入力を解析する場合は注意が必要です。 不正なファイルを解析すると、大量のリソースを消費したり、パニックを引き起こす可能性があるためです。

Index

Constants

This section is empty.

Variables

View Source
var ErrUnknownPC = errors.New("ErrUnknownPC")

ErrUnknownPCは、LineReader.ScanPCが行テーブルのエントリによってカバーされていないPCを検出した場合に返されるエラーです。

Functions

This section is empty.

Types

type AddrType

type AddrType struct {
	BasicType
}

AddrTypeは、マシンアドレス型を表します。

type ArrayType

type ArrayType struct {
	CommonType
	Type          Type
	StrideBitSize int64
	Count         int64
}

ArrayTypeは、固定サイズの配列型を表します。

func (*ArrayType) Size

func (t *ArrayType) Size() int64

func (*ArrayType) String

func (t *ArrayType) String() string

type Attr

type Attr uint32

Attrは、[Entry.Field] 内の属性タイプを識別します。

const (
	AttrSibling        Attr = 0x01
	AttrLocation       Attr = 0x02
	AttrName           Attr = 0x03
	AttrOrdering       Attr = 0x09
	AttrByteSize       Attr = 0x0B
	AttrBitOffset      Attr = 0x0C
	AttrBitSize        Attr = 0x0D
	AttrStmtList       Attr = 0x10
	AttrLowpc          Attr = 0x11
	AttrHighpc         Attr = 0x12
	AttrLanguage       Attr = 0x13
	AttrDiscr          Attr = 0x15
	AttrDiscrValue     Attr = 0x16
	AttrVisibility     Attr = 0x17
	AttrImport         Attr = 0x18
	AttrStringLength   Attr = 0x19
	AttrCommonRef      Attr = 0x1A
	AttrCompDir        Attr = 0x1B
	AttrConstValue     Attr = 0x1C
	AttrContainingType Attr = 0x1D
	AttrDefaultValue   Attr = 0x1E
	AttrInline         Attr = 0x20
	AttrIsOptional     Attr = 0x21
	AttrLowerBound     Attr = 0x22
	AttrProducer       Attr = 0x25
	AttrPrototyped     Attr = 0x27
	AttrReturnAddr     Attr = 0x2A
	AttrStartScope     Attr = 0x2C
	AttrStrideSize     Attr = 0x2E
	AttrUpperBound     Attr = 0x2F
	AttrAbstractOrigin Attr = 0x31
	AttrAccessibility  Attr = 0x32
	AttrAddrClass      Attr = 0x33
	AttrArtificial     Attr = 0x34
	AttrBaseTypes      Attr = 0x35
	AttrCalling        Attr = 0x36
	AttrCount          Attr = 0x37
	AttrDataMemberLoc  Attr = 0x38
	AttrDeclColumn     Attr = 0x39
	AttrDeclFile       Attr = 0x3A
	AttrDeclLine       Attr = 0x3B
	AttrDeclaration    Attr = 0x3C
	AttrDiscrList      Attr = 0x3D
	AttrEncoding       Attr = 0x3E
	AttrExternal       Attr = 0x3F
	AttrFrameBase      Attr = 0x40
	AttrFriend         Attr = 0x41
	AttrIdentifierCase Attr = 0x42
	AttrMacroInfo      Attr = 0x43
	AttrNamelistItem   Attr = 0x44
	AttrPriority       Attr = 0x45
	AttrSegment        Attr = 0x46
	AttrSpecification  Attr = 0x47
	AttrStaticLink     Attr = 0x48
	AttrType           Attr = 0x49
	AttrUseLocation    Attr = 0x4A
	AttrVarParam       Attr = 0x4B
	AttrVirtuality     Attr = 0x4C
	AttrVtableElemLoc  Attr = 0x4D
	// 以下はDWARF 3で新しくなったものです。
	AttrAllocated     Attr = 0x4E
	AttrAssociated    Attr = 0x4F
	AttrDataLocation  Attr = 0x50
	AttrStride        Attr = 0x51
	AttrEntrypc       Attr = 0x52
	AttrUseUTF8       Attr = 0x53
	AttrExtension     Attr = 0x54
	AttrRanges        Attr = 0x55
	AttrTrampoline    Attr = 0x56
	AttrCallColumn    Attr = 0x57
	AttrCallFile      Attr = 0x58
	AttrCallLine      Attr = 0x59
	AttrDescription   Attr = 0x5A
	AttrBinaryScale   Attr = 0x5B
	AttrDecimalScale  Attr = 0x5C
	AttrSmall         Attr = 0x5D
	AttrDecimalSign   Attr = 0x5E
	AttrDigitCount    Attr = 0x5F
	AttrPictureString Attr = 0x60
	AttrMutable       Attr = 0x61
	AttrThreadsScaled Attr = 0x62
	AttrExplicit      Attr = 0x63
	AttrObjectPointer Attr = 0x64
	AttrEndianity     Attr = 0x65
	AttrElemental     Attr = 0x66
	AttrPure          Attr = 0x67
	AttrRecursive     Attr = 0x68
	// 以下はDWARF 4で新しくなったものです。
	AttrSignature      Attr = 0x69
	AttrMainSubprogram Attr = 0x6A
	AttrDataBitOffset  Attr = 0x6B
	AttrConstExpr      Attr = 0x6C
	AttrEnumClass      Attr = 0x6D
	AttrLinkageName    Attr = 0x6E
	// 以下はDWARF 5で新しくなったものです。
	AttrStringLengthBitSize  Attr = 0x6F
	AttrStringLengthByteSize Attr = 0x70
	AttrRank                 Attr = 0x71
	AttrStrOffsetsBase       Attr = 0x72
	AttrAddrBase             Attr = 0x73
	AttrRnglistsBase         Attr = 0x74
	AttrDwoName              Attr = 0x76
	AttrReference            Attr = 0x77
	AttrRvalueReference      Attr = 0x78
	AttrMacros               Attr = 0x79
	AttrCallAllCalls         Attr = 0x7A
	AttrCallAllSourceCalls   Attr = 0x7B
	AttrCallAllTailCalls     Attr = 0x7C
	AttrCallReturnPC         Attr = 0x7D
	AttrCallValue            Attr = 0x7E
	AttrCallOrigin           Attr = 0x7F
	AttrCallParameter        Attr = 0x80
	AttrCallPC               Attr = 0x81
	AttrCallTailCall         Attr = 0x82
	AttrCallTarget           Attr = 0x83
	AttrCallTargetClobbered  Attr = 0x84
	AttrCallDataLocation     Attr = 0x85
	AttrCallDataValue        Attr = 0x86
	AttrNoreturn             Attr = 0x87
	AttrAlignment            Attr = 0x88
	AttrExportSymbols        Attr = 0x89
	AttrDeleted              Attr = 0x8A
	AttrDefaulted            Attr = 0x8B
	AttrLoclistsBase         Attr = 0x8C
)

func (Attr) GoString

func (a Attr) GoString() string

func (Attr) String

func (i Attr) String() string

type BasicType

type BasicType struct {
	CommonType
	BitSize       int64
	BitOffset     int64
	DataBitOffset int64
}

BasicTypeは、すべての基本型に共通するフィールドを保持します。

BitSize / BitOffset / DataBitOffsetフィールドの解釈に関する詳細については、StructField のドキュメントを参照してください。

func (*BasicType) Basic

func (b *BasicType) Basic() *BasicType

func (*BasicType) String

func (t *BasicType) String() string

type BoolType

type BoolType struct {
	BasicType
}

BoolTypeは、ブール型を表します。

type CharType

type CharType struct {
	BasicType
}

CharTypeは、符号付き文字型を表します。

type Class added in v1.5.0

type Class int

Classは、属性値のDWARF 4クラスです。

一般的に、特定の属性の値は、DWARFによって定義されたいくつかの可能なクラスのうちの1つを取ることができます。 それぞれのクラスは、属性のわずかに異なる解釈につながります。

DWARFバージョン4は、以前のDWARFバージョンよりも属性値クラスを細かく区別します。 リーダーは、以前のDWARFバージョンの粗いクラスを、適切なDWARF 4クラスに明確に区別します。 たとえば、DWARF 2は、定数だけでなくすべてのタイプのセクションオフセットに対して「constant」を使用しますが、 リーダーは、セクションオフセットを参照するDWARF 2ファイルの属性を、Class*Ptrクラスの1つに正規化します。 これらのクラスは、DWARF 3でのみ定義されていたにもかかわらずです。

const (
	// ClassUnknownは、未知のDWARFクラスの値を表します。
	ClassUnknown Class = iota

	// ClassAddressは、ターゲットマシン上のアドレスであるuint64型の値を表します。
	ClassAddress

	// ClassBlockは、属性に依存する[]byte型の値を表します。
	ClassBlock

	// ClassConstantは、定数であるint64型の値を表します。
	// この定数の解釈は、属性に依存します。
	ClassConstant

	// ClassExprLocは、エンコードされたDWARF式またはロケーション記述を含む[]byte型の値を表します。
	ClassExprLoc

	// ClassFlagは、bool型の値を表します。
	ClassFlag

	// ClassLinePtrは、int64オフセットである値を表します。
	// このオフセットは、"line"セクション内の位置を指します。
	ClassLinePtr

	// ClassLocListPtrは、int64オフセットである値を表します。
	// このオフセットは、"loclist"セクション内の位置を指します。
	ClassLocListPtr

	// ClassMacPtrは、int64オフセットである値を表します。
	// このオフセットは、"mac"セクション内の位置を指します。
	ClassMacPtr

	// ClassRangeListPtrは、int64オフセットである値を表します。
	// このオフセットは、"rangelist"セクション内の位置を指します。
	ClassRangeListPtr

	// ClassReferenceは、infoセクション内のEntryのオフセットを表す値を表します。
	// (Reader.Seekで使用するため)。
	// DWARF仕様は、ClassReferenceとClassReferenceSigをクラス"reference"に結合します。
	ClassReference

	// ClassReferenceSigは、型Entryを参照するuint64型のシグネチャを表す値を表します。
	ClassReferenceSig

	// ClassStringは、文字列を表す値を表します。
	// コンパイルユニットがAttrUseUTF8フラグ(強く推奨)を指定している場合、
	// 文字列値はUTF-8でエンコードされます。それ以外の場合、エンコーディングは未指定です。
	ClassString

	// ClassReferenceAltは、代替オブジェクトファイルのDWARF "info"セクション内のオフセットを表すint64型の値を表します。
	ClassReferenceAlt

	// ClassStringAltは、代替オブジェクトファイルのDWARF文字列セクション内のオフセットを表すint64型の値を表します。
	ClassStringAlt

	// ClassAddrPtrは、"addr"セクション内のint64オフセットである値を表します。
	ClassAddrPtr

	// ClassLocListは、"loclists"セクション内のint64オフセットである値を表します。
	ClassLocList

	// ClassRngListは、"rnglists"セクションのベースからのuint64オフセットを表す値を表します。
	ClassRngList

	// ClassRngListsPtrは、"rnglists"セクション内のint64オフセットである値を表します。
	// これらは、ClassRngList値のベースとして使用されます。
	ClassRngListsPtr

	// ClassStrOffsetsPtrは、"str_offsets"セクション内のint64オフセットである値を表します。
	ClassStrOffsetsPtr
)

func (Class) GoString added in v1.5.0

func (i Class) GoString() string

func (Class) String added in v1.5.0

func (i Class) String() string

type CommonType

type CommonType struct {
	ByteSize int64
	Name     string
}

CommonTypeは、複数の型で共通のフィールドを保持します。 フィールドが特定の型に対して不明または適用できない場合、 ゼロ値が使用されます。

func (*CommonType) Common

func (c *CommonType) Common() *CommonType

func (*CommonType) Size

func (c *CommonType) Size() int64

type ComplexType

type ComplexType struct {
	BasicType
}

ComplexTypeは、複素数の浮動小数点数型を表します。

type Data

type Data struct {
	// contains filtered or unexported fields
}

Dataは、実行可能ファイル(例えば、ELFまたはMach-O実行可能ファイル)からロードされた DWARFデバッグ情報を表します。

func New

func New(abbrev, aranges, frame, info, line, pubnames, ranges, str []byte) (*Data, error)

Newは、指定されたパラメータから初期化された新しい Data オブジェクトを返します。 この関数を直接呼び出す代わりに、クライアントは通常、適切なパッケージ debug/elfdebug/macho、または debug/pe のFile型のDWARFメソッドを使用する必要があります。

[]byte引数は、オブジェクトファイルの対応するデバッグセクションからのデータです。 たとえば、ELFオブジェクトの場合、abbrevは".debug_abbrev"セクションの内容です。

func (*Data) AddSection added in v1.14.0

func (d *Data) AddSection(name string, contents []byte) error

AddSectionは、名前で指定された別のDWARFセクションを追加します。 名前は、".debug_addr"、".debug_str_offsets"などのDWARFセクション名である必要があります。 このアプローチは、DWARF 5以降で追加された新しいDWARFセクションに使用されます。

func (*Data) AddTypes added in v1.3.0

func (d *Data) AddTypes(name string, types []byte) error

AddTypesは、DWARFデータに1つの.debug_typesセクションを追加します。 DWARFバージョン4のデバッグ情報を持つ典型的なオブジェクトには、複数の.debug_typesセクションがあります。 名前はエラー報告のみに使用され、1つの.debug_typesセクションを別のセクションと区別するために使用されます。

func (*Data) LineReader added in v1.5.0

func (d *Data) LineReader(cu *Entry) (*LineReader, error)

LineReaderは、TagCompileUnit を持つ Entry cuの行テーブルのための新しいリーダーを返します。

このコンパイルユニットに行テーブルがない場合、nil、nilを返します。

func (*Data) Ranges added in v1.7.0

func (d *Data) Ranges(e *Entry) ([][2]uint64, error)

Rangesは、eによってカバーされるPC範囲、つまり[low, high)のペアのスライスを返します。 TagCompileUnitTagSubprogram など、一部のエントリタイプのみがPC範囲を持っています。 それ以外の場合、エラーを返さずにnilを返します。

func (*Data) Reader

func (d *Data) Reader() *Reader

Readerは、Data のための新しいReaderを返します。 このリーダーは、DWARF「info」セクションのバイトオフセット0に位置しています。

func (*Data) Type

func (d *Data) Type(off Offset) (Type, error)

Typeは、DWARF「info」セクションのoffにある型を読み取ります。

type DecodeError

type DecodeError struct {
	Name   string
	Offset Offset
	Err    string
}

func (DecodeError) Error

func (e DecodeError) Error() string

type DotDotDotType

type DotDotDotType struct {
	CommonType
}

DotDotDotTypeは、可変長の...関数パラメータを表します。

func (*DotDotDotType) String

func (t *DotDotDotType) String() string

type Entry

type Entry struct {
	Offset   Offset
	Tag      Tag
	Children bool
	Field    []Field
}

エントリは、属性/値のペアのシーケンスです。

func (*Entry) AttrField added in v1.5.0

func (e *Entry) AttrField(a Attr) *Field

AttrFieldは、Entry内の属性 Attr に関連付けられた Field を返します。 そのような属性が存在しない場合は、nilを返します。

func (*Entry) Val

func (e *Entry) Val(a Attr) any

Valは、Entry 内の属性 Attr に関連付けられた値を返します。 そのような属性が存在しない場合は、nilを返します。

一般的なイディオムは、nilの返却値のチェックを、 期待される動的型を持つ値のチェックと統合することです。例えば、以下のようになります。

v, ok := e.Val(AttrSibling).(int64)

type EnumType

type EnumType struct {
	CommonType
	EnumName string
	Val      []*EnumValue
}

EnumTypeは、列挙型を表します。 ネイティブの整数型の唯一の指標は、CommonType 内のByteSizeです。

func (*EnumType) String

func (t *EnumType) String() string

type EnumValue

type EnumValue struct {
	Name string
	Val  int64
}

EnumValueは、単一の列挙値を表します。

type Field

type Field struct {
	Attr  Attr
	Val   any
	Class Class
}

Fieldは、Entry 内の単一の属性/値ペアです。

値は、DWARFによって定義されたいくつかの「属性クラス」のうちの1つです。 各クラスに対応するGoの型は次のとおりです。

DWARFクラス       Goの型        クラス
-----------       -------        -----
address           uint64         ClassAddress
block             []byte         ClassBlock
constant          int64          ClassConstant
flag              bool           ClassFlag
reference
  to info         dwarf.Offset   ClassReference
  to type unit    uint64         ClassReferenceSig
string            string         ClassString
exprloc           []byte         ClassExprLoc
lineptr           int64          ClassLinePtr
loclistptr        int64          ClassLocListPtr
macptr            int64          ClassMacPtr
rangelistptr      int64          ClassRangeListPtr

識別できないまたはベンダー定義の属性の場合、ClassClassUnknown になります。

type FloatType

type FloatType struct {
	BasicType
}

FloatTypeは、浮動小数点数型を表します。

type FuncType

type FuncType struct {
	CommonType
	ReturnType Type
	ParamType  []Type
}

FuncTypeは、関数の型を表します。

func (*FuncType) String

func (t *FuncType) String() string

type IntType

type IntType struct {
	BasicType
}

IntTypeは、符号付き整数型を表します。

type LineEntry added in v1.5.0

type LineEntry struct {
	// Addressは、コンパイラによって生成されたマシン命令のプログラムカウンター値です。
	// このLineEntryは、Addressから次のLineEntryのAddressの直前までの各命令に適用されます。
	Address uint64

	// OpIndexは、VLIW命令内の操作のインデックスです。
	// 最初の操作のインデックスは0です。非VLIWアーキテクチャの場合、常に0になります。
	// AddressとOpIndexは、命令ストリーム内の任意の個々の操作を参照できる操作ポインターを形成します。
	OpIndex int

	// Fileは、これらの命令に対応するソースファイルです。
	File *LineFile

	// Lineは、これらの命令に対応するソースコードの行番号です。
	// 行番号は1から始まります。これらの命令がどのソース行にも関連付けられていない場合は、0になる場合があります。
	Line int

	// Columnは、これらの命令のソース行内の列番号です。
	// 列番号は1から始まります。行の「左端」を示すために0になる場合があります。
	Column int

	// IsStmtは、Addressが推奨されるブレークポイントの場所であることを示します。
	// 例えば、行の始まり、文の始まり、または文の明確な部分などです。
	IsStmt bool

	// BasicBlockは、Addressが基本ブロックの開始であることを示します。
	BasicBlock bool

	// PrologueEndは、Addressが、含まれる関数へのエントリにブレークポイントを設定するために、
	// 実行を一時停止する必要があるPCの1つ(可能性がある)であることを示します。
	//
	// DWARF 3で追加されました。
	PrologueEnd bool

	// EpilogueBeginは、Addressが、この関数からの終了時にブレークポイントを設定するために、
	// 実行を一時停止する必要があるPCの1つ(可能性がある)であることを示します。
	//
	// DWARF 3で追加されました。
	EpilogueBegin bool

	// ISAは、これらの命令の命令セットアーキテクチャを表します。
	// 可能なISA値は、適用可能なABI仕様によって定義される必要があります。
	//
	// DWARF 3で追加されました。
	ISA int

	// Discriminatorは、これらの命令が属するブロックを示す任意の整数です。
	// これにより、同じソースファイル、行、列を持つ複数のブロックを区別できます。
	// 特定のソース位置に1つのブロックしか存在しない場合、0にする必要があります。
	//
	// DWARF 3で追加されました。
	Discriminator int

	// EndSequenceは、Addressがターゲットマシン命令のシーケンスの終わりの直後の最初のバイトであることを示します。
	// 設定されている場合、このフィールドとAddressフィールドのみが有意です。
	// 行番号テーブルには、複数の可能性のある不連続な命令シーケンスの情報が含まれる場合があります。
	// 行テーブルの最後のエントリには、常にEndSequenceが設定されている必要があります。
	EndSequence bool
}

LineEntryは、DWARF行テーブル内の行を表します。

type LineFile added in v1.5.0

type LineFile struct {
	Name   string
	Mtime  uint64
	Length int
}

LineFileは、DWARF行テーブルエントリによって参照されるソースファイルです。

type LineReader added in v1.5.0

type LineReader struct {
	// contains filtered or unexported fields
}

LineReaderは、単一のコンパイルユニットのDWARF「line」セクションから LineEntry 構造体のシーケンスを読み取ります。 LineEntry は、PCの増加順に発生し、各 LineEntry は、その LineEntry のPCから次の LineEntry のPCの直前までの命令のメタデータを提供します。 最後のエントリには、[LineEntry.EndSequence] フィールドが設定されます。

func (*LineReader) Files added in v1.14.0

func (r *LineReader) Files() []*LineFile

Filesは、現在の行テーブルの位置に基づいて、このコンパイルユニットのファイル名テーブルを返します。 ファイル名テーブルは、AttrDeclFile などのこのコンパイルユニットの属性から参照される場合があります。

Entry 0は常にnilです。なぜなら、ファイルインデックス0は「ファイルなし」を表すからです。

コンパイルユニットのファイル名テーブルは固定されていません。Filesは、 行テーブルの現在の位置に基づいてファイルテーブルを返します。 これにより、行テーブルの以前の位置のファイルテーブルよりもエントリが多く含まれる場合がありますが、 既存のエントリは変更されません。

func (*LineReader) Next added in v1.5.0

func (r *LineReader) Next(entry *LineEntry) error

Nextは、この行テーブルの次の行を*entryに設定し、次の行に移動します。 もうエントリがなく、行テーブルが適切に終了している場合、io.EOF を返します。

行は常にentry.Addressの増加順に並んでいますが、entry.Lineは前後に移動する場合があります。

func (*LineReader) Reset added in v1.5.0

func (r *LineReader) Reset()

Resetは、行テーブルリーダーを行テーブルの先頭に再配置します。

func (*LineReader) Seek added in v1.5.0

func (r *LineReader) Seek(pos LineReaderPos)

Seekは、LineReader.Tell によって返された位置に行テーブルリーダーを復元します。

引数posは、この行テーブルの LineReader.Tell 呼び出しによって返されたものである必要があります。

func (*LineReader) SeekPC added in v1.5.0

func (r *LineReader) SeekPC(pc uint64, entry *LineEntry) error

SeekPCは、pcを含む LineEntry を*entryに設定し、 行テーブルの次のエントリに位置を設定します。 必要に応じて、pcを検索するために後方にシークします。

pcがこの行テーブルのエントリによってカバーされていない場合、 SeekPCは ErrUnknownPC を返します。この場合、*entryと最終的なシーク位置は未指定です。

DWARF行テーブルは、順次前方スキャンのみを許可します。 したがって、最悪の場合、これには行テーブルのサイズに比例する時間がかかります。 呼び出し側が繰り返し高速なPC検索を行いたい場合は、 適切な行テーブルのインデックスを構築する必要があります。

func (*LineReader) Tell added in v1.5.0

func (r *LineReader) Tell() LineReaderPos

Tellは、行テーブル内の現在の位置を返します。

type LineReaderPos added in v1.5.0

type LineReaderPos struct {
	// contains filtered or unexported fields
}

LineReaderPosは、行テーブル内の位置を表します。

type Offset

type Offset uint32

Offsetは、DWARF情報内の Entry の位置を表します。 (Reader.Seek を参照してください。)

type PtrType

type PtrType struct {
	CommonType
	Type Type
}

PtrTypeは、ポインタ型を表します。

func (*PtrType) String

func (t *PtrType) String() string

type QualType

type QualType struct {
	CommonType
	Qual string
	Type Type
}

QualTypeは、C/C++の「const」、「restrict」、または「volatile」修飾子を持つ型を表します。

func (*QualType) Size

func (t *QualType) Size() int64

func (*QualType) String

func (t *QualType) String() string

type Reader

type Reader struct {
	// contains filtered or unexported fields
}

Readerは、DWARF「info」セクションから Entry 構造体を読み取ることを可能にします。 Entry 構造体はツリー形式で配置されています。Reader.Next 関数は、 ツリーの先行順序の走査から連続するエントリを返します。 エントリに子がある場合、そのChildrenフィールドはtrueになり、子は Tag 0の Entry で終了します。

func (*Reader) AddressSize added in v1.5.0

func (r *Reader) AddressSize() int

AddressSizeは、現在のコンパイルユニットのアドレスのバイト数を返します。

func (*Reader) ByteOrder added in v1.14.0

func (r *Reader) ByteOrder() binary.ByteOrder

ByteOrderは、現在のコンパイルユニットのバイトオーダーを返します。

func (*Reader) Next

func (r *Reader) Next() (*Entry, error)

Nextは、エンコードされたエントリストリームから次のエントリを読み取ります。 セクションの終わりに達した場合、nil、nilを返します。 現在のオフセットが無効であるか、オフセットのデータを有効な Entry としてデコードできない場合、エラーを返します。

func (*Reader) Seek

func (r *Reader) Seek(off Offset)

Seekは、エンコードされたエントリストリーム内のオフセットoffに Reader を配置します。 オフセット0は最初のエントリを示すために使用できます。

func (*Reader) SeekPC added in v1.7.0

func (r *Reader) SeekPC(pc uint64) (*Entry, error)

SeekPCは、pcを含むコンパイルユニットの Entry を返し、 そのユニットの子を読み取るためにリーダーを配置します。 pcがどのユニットにも含まれていない場合、SeekPCは ErrUnknownPC を返し、 リーダーの位置は未定義です。

コンパイルユニットが実行可能ファイルの複数の領域を記述できるため、 SeekPCは最悪の場合、すべてのコンパイルユニットのすべての範囲を検索する必要があります。 SeekPCの各呼び出しは、前回の呼び出しのコンパイルユニットから検索を開始するため、 一般的には、PCをソートすると、連続する高速なPC検索を行う場合に効果的です。 呼び出し元が繰り返し高速なPC検索を行いたい場合は、Rangesメソッドを使用して適切なインデックスを構築する必要があります。

func (*Reader) SkipChildren

func (r *Reader) SkipChildren()

SkipChildrenは、Reader.Next によって返された最後の Entry に関連付けられた子エントリをスキップします。 その Entry に子がない場合、または Reader.Next が呼び出されていない場合、SkipChildrenは何もしません。

type StructField

type StructField struct {
	Name          string
	Type          Type
	ByteOffset    int64
	ByteSize      int64
	BitOffset     int64
	DataBitOffset int64
	BitSize       int64
}

StructFieldは、構造体、共用体、またはC++クラス型のフィールドを表します。

ビットフィールド

BitSize、BitOffset、DataBitOffsetフィールドは、C/C++のstruct/union/class型でビットフィールドとして宣言されたデータメンバーのビットサイズとオフセットを記述します。

BitSizeは、ビットフィールドのビット数です。

DataBitOffsetが0以外の場合、それは、 ビットフィールドの開始位置から囲むエンティティ(例:含まれるstruct/class/union)の開始位置までのビット数です。 これは、DWARF 4で導入されたDW_AT_data_bit_offset DWARF属性に対応します。

BitOffsetが0以外の場合、それは、 ビットフィールドを保持するストレージユニットの最上位ビットからビットフィールドの最上位ビットまでのビット数です。 ここで「ストレージユニット」とは、ビットフィールドの前の型名です(フィールド「unsigned x:17」の場合、ストレージユニットは「unsigned」です)。 BitOffsetの値は、システムのエンディアンによって異なる場合があります。 BitOffsetは、DWARF 4で廃止され、DWARF 5で削除されたDW_AT_bit_offset DWARF属性に対応します。

DataBitOffsetとBitOffsetのうち、最大1つだけが非ゼロになります。 DataBitOffset/BitOffsetは、BitSizeが非ゼロの場合にのみ非ゼロになります。 Cコンパイラがどちらを使用するかは、コンパイラのバージョンとコマンドラインオプションに依存します。

以下は、C/C++のビットフィールドの使用例と、DWARFビットオフセット情報の期待値の例です。 このコードを考えてみましょう。

struct S {
	int q;
	int j:5;
	int k:6;
	int m:5;
	int n:8;
} s;

上記のコードに対して、GCC 8を使用している場合、DW_AT_bit_offsetの値は次のようになることが期待されます。

       Little   |     Big
       Endian   |    Endian
                |
"j":     27     |     0
"k":     21     |     5
"m":     16     |     11
"n":     8      |     16

上記のように、j/k/m/nの含まれるストレージユニットに対するオフセットのみが考慮されます。これらの値は、含まれる構造体の前のデータメンバーのサイズに基づいて変化することはありません。

コンパイラがDW_AT_data_bit_offsetを出力する場合、期待される値は次のようになります。

"j":     32
"k":     37
"m":     43
"n":     48

ここで、"j"の値32は、ビットフィールドが他のデータメンバーに続くことを反映しています(DW_AT_data_bit_offset値は、含まれる構造体の開始位置を基準としています)。 したがって、DW_AT_data_bit_offset値は、多数のフィールドを持つ構造体ではかなり大きくなる可能性があります。

DWARFは、ビットサイズとビットオフセットがゼロでない基本型の可能性も許容しているため、これらの情報は基本型に対してもキャプチャされます。 ただし、主流の言語を使用してこの動作をトリガーすることはできないことに注意する価値があります。

type StructType

type StructType struct {
	CommonType
	StructName string
	Kind       string
	Field      []*StructField
	Incomplete bool
}

StructTypeは、構造体、共用体、またはC++クラス型を表します。

func (*StructType) Defn

func (t *StructType) Defn() string

func (*StructType) String

func (t *StructType) String() string

type Tag

type Tag uint32

Tagは、Entry の分類(タイプ)です。

const (
	TagArrayType              Tag = 0x01
	TagClassType              Tag = 0x02
	TagEntryPoint             Tag = 0x03
	TagEnumerationType        Tag = 0x04
	TagFormalParameter        Tag = 0x05
	TagImportedDeclaration    Tag = 0x08
	TagLabel                  Tag = 0x0A
	TagLexDwarfBlock          Tag = 0x0B
	TagMember                 Tag = 0x0D
	TagPointerType            Tag = 0x0F
	TagReferenceType          Tag = 0x10
	TagCompileUnit            Tag = 0x11
	TagStringType             Tag = 0x12
	TagStructType             Tag = 0x13
	TagSubroutineType         Tag = 0x15
	TagTypedef                Tag = 0x16
	TagUnionType              Tag = 0x17
	TagUnspecifiedParameters  Tag = 0x18
	TagVariant                Tag = 0x19
	TagCommonDwarfBlock       Tag = 0x1A
	TagCommonInclusion        Tag = 0x1B
	TagInheritance            Tag = 0x1C
	TagInlinedSubroutine      Tag = 0x1D
	TagModule                 Tag = 0x1E
	TagPtrToMemberType        Tag = 0x1F
	TagSetType                Tag = 0x20
	TagSubrangeType           Tag = 0x21
	TagWithStmt               Tag = 0x22
	TagAccessDeclaration      Tag = 0x23
	TagBaseType               Tag = 0x24
	TagCatchDwarfBlock        Tag = 0x25
	TagConstType              Tag = 0x26
	TagConstant               Tag = 0x27
	TagEnumerator             Tag = 0x28
	TagFileType               Tag = 0x29
	TagFriend                 Tag = 0x2A
	TagNamelist               Tag = 0x2B
	TagNamelistItem           Tag = 0x2C
	TagPackedType             Tag = 0x2D
	TagSubprogram             Tag = 0x2E
	TagTemplateTypeParameter  Tag = 0x2F
	TagTemplateValueParameter Tag = 0x30
	TagThrownType             Tag = 0x31
	TagTryDwarfBlock          Tag = 0x32
	TagVariantPart            Tag = 0x33
	TagVariable               Tag = 0x34
	TagVolatileType           Tag = 0x35
	// 以下はDWARF 3で新しくなったものです。
	TagDwarfProcedure  Tag = 0x36
	TagRestrictType    Tag = 0x37
	TagInterfaceType   Tag = 0x38
	TagNamespace       Tag = 0x39
	TagImportedModule  Tag = 0x3A
	TagUnspecifiedType Tag = 0x3B
	TagPartialUnit     Tag = 0x3C
	TagImportedUnit    Tag = 0x3D
	TagMutableType     Tag = 0x3E
	TagCondition       Tag = 0x3F
	TagSharedType      Tag = 0x40
	// 以下はDWARF 4で新しくなったものです。
	TagTypeUnit            Tag = 0x41
	TagRvalueReferenceType Tag = 0x42
	TagTemplateAlias       Tag = 0x43
	// 以下はDWARF 5で新しくなったものです。
	TagCoarrayType       Tag = 0x44
	TagGenericSubrange   Tag = 0x45
	TagDynamicType       Tag = 0x46
	TagAtomicType        Tag = 0x47
	TagCallSite          Tag = 0x48
	TagCallSiteParameter Tag = 0x49
	TagSkeletonUnit      Tag = 0x4A
	TagImmutableType     Tag = 0x4B
)

func (Tag) GoString

func (t Tag) GoString() string

func (Tag) String

func (i Tag) String() string

type Type

type Type interface {
	Common() *CommonType
	String() string
	Size() int64
}

Typeは、通常、特定のType構造体(CharTypeStructType など)のいずれかへのポインタを表します。

type TypedefType

type TypedefType struct {
	CommonType
	Type Type
}

TypedefTypeは、名前付き型を表します。

func (*TypedefType) Size

func (t *TypedefType) Size() int64

func (*TypedefType) String

func (t *TypedefType) String() string

type UcharType

type UcharType struct {
	BasicType
}

UcharTypeは、符号なし文字型を表します。

type UintType

type UintType struct {
	BasicType
}

UintTypeは、符号なし整数型を表します。

type UnspecifiedType added in v1.4.0

type UnspecifiedType struct {
	BasicType
}

UnspecifiedTypeは、暗黙的な、不明な、曖昧な、または存在しない型を表します。

type UnsupportedType added in v1.13.0

type UnsupportedType struct {
	CommonType
	Tag Tag
}

UnsupportedTypeは、サポートされていない型に遭遇した場合に返されるプレースホルダーです。

func (*UnsupportedType) String added in v1.13.0

func (t *UnsupportedType) String() string

type VoidType

type VoidType struct {
	CommonType
}

VoidTypeは、Cのvoid型を表します。

func (*VoidType) String

func (t *VoidType) String() string

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL