github.com/shogo82148/std@v1.22.1-0.20240327122250-4e474527810c/debug/dwarf/open.go (about) 1 // Copyright 2009 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 /* 6 パッケージdwarfは、実行可能ファイルからロードされたDWARFデバッグ情報へのアクセスを提供します。 7 これは、DWARF 2.0標準で定義されています。 8 http://dwarfstd.org/doc/dwarf-2.0.0.pdf 9 10 # セキュリティ 11 12 このパッケージは、敵対的な入力に対して強化されていないため、https://go.dev/security/policy の範囲外です。 13 特に、オブジェクトファイルを解析する際には基本的な検証しか行われません。 14 そのため、信頼できない入力を解析する場合は注意が必要です。 15 不正なファイルを解析すると、大量のリソースを消費したり、パニックを引き起こす可能性があるためです。 16 */ 17 package dwarf 18 19 import ( 20 "github.com/shogo82148/std/encoding/binary" 21 ) 22 23 // Dataは、実行可能ファイル(例えば、ELFまたはMach-O実行可能ファイル)からロードされた 24 // DWARFデバッグ情報を表します。 25 type Data struct { 26 // raw data 27 abbrev []byte 28 aranges []byte 29 frame []byte 30 info []byte 31 line []byte 32 pubnames []byte 33 ranges []byte 34 str []byte 35 36 // New sections added in DWARF 5. 37 addr []byte 38 lineStr []byte 39 strOffsets []byte 40 rngLists []byte 41 42 // parsed data 43 abbrevCache map[uint64]abbrevTable 44 bigEndian bool 45 order binary.ByteOrder 46 typeCache map[Offset]Type 47 typeSigs map[uint64]*typeUnit 48 unit []unit 49 } 50 51 // Newは、指定されたパラメータから初期化された新しい [Data] オブジェクトを返します。 52 // この関数を直接呼び出す代わりに、クライアントは通常、適切なパッケージ [debug/elf]、[debug/macho]、または [debug/pe] のFile型のDWARFメソッドを使用する必要があります。 53 // 54 // []byte引数は、オブジェクトファイルの対応するデバッグセクションからのデータです。 55 // たとえば、ELFオブジェクトの場合、abbrevは".debug_abbrev"セクションの内容です。 56 func New(abbrev, aranges, frame, info, line, pubnames, ranges, str []byte) (*Data, error) 57 58 // AddTypesは、DWARFデータに1つの.debug_typesセクションを追加します。 59 // DWARFバージョン4のデバッグ情報を持つ典型的なオブジェクトには、複数の.debug_typesセクションがあります。 60 // 名前はエラー報告のみに使用され、1つの.debug_typesセクションを別のセクションと区別するために使用されます。 61 func (d *Data) AddTypes(name string, types []byte) error 62 63 // AddSectionは、名前で指定された別のDWARFセクションを追加します。 64 // 名前は、".debug_addr"、".debug_str_offsets"などのDWARFセクション名である必要があります。 65 // このアプローチは、DWARF 5以降で追加された新しいDWARFセクションに使用されます。 66 func (d *Data) AddSection(name string, contents []byte) error