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