gosym

package
v1.21.7 Latest Latest
Warning

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

Go to latest
Published: Dec 24, 2023 License: MIT Imports: 2 Imported by: 0

Documentation

Overview

gosymパッケージは、gcコンパイラによって生成されたGoバイナリに埋め込まれた Goのシンボルと行番号のテーブルへのアクセスを実装します。

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type DecodingError

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

DecodingError represents an error during the decoding of the symbol table.

func (*DecodingError) Error

func (e *DecodingError) Error() string

type Func

type Func struct {
	Entry uint64
	*Sym
	End       uint64
	Params    []*Sym
	Locals    []*Sym
	FrameSize int
	LineTable *LineTable
	Obj       *Obj
}

Funcは、単一の関数に関する情報を収集します。

type LineTable

type LineTable struct {
	Data []byte
	PC   uint64
	Line int
	// contains filtered or unexported fields
}

LineTableは、プログラムカウンタを行番号にマッピングするデータ構造です。

Go 1.1以前では、各関数(Funcによって表される)は独自のLineTableを持ち、 行番号はプログラム内のすべてのソース行を通じての番号付けに対応していました。 その絶対行番号は、別途ファイル名とファイル内の行番号に変換する必要がありました。

Go 1.2では、データの形式が変更され、プログラム全体で単一のLineTableが存在し、 すべてのFuncが共有し、絶対行番号はなく、特定のファイル内の行番号のみが存在します。

大部分において、LineTableのメソッドはパッケージの内部詳細として扱うべきであり、 呼び出し元は代わりにTableのメソッドを使用するべきです。

func NewLineTable

func NewLineTable(data []byte, text uint64) *LineTable

NewLineTableは、エンコードされたデータに対応する新しいPC/行テーブルを返します。 Textは、対応するテキストセグメントの開始アドレスでなければなりません。

func (*LineTable) LineToPC deprecated

func (t *LineTable) LineToPC(line int, maxpc uint64) uint64

LineToPCは、指定された行番号に対応するプログラムカウンタを返します。 ただし、maxpcより前のプログラムカウンタのみを考慮します。

Deprecated: 代わりにTableのLineToPCメソッドを使用してください。

func (*LineTable) PCToLine deprecated

func (t *LineTable) PCToLine(pc uint64) int

PCToLineは、指定されたプログラムカウンタに対応する行番号を返します。

Deprecated: 代わりにTableのPCToLineメソッドを使用してください。

type Obj

type Obj struct {
	// Funcsは、Obj内の関数のリストです。
	Funcs []Func

	// Go 1.1以前では、PathsはObjを生成したソースファイル名に対応するシンボルのリストです。
	// Go 1.2では、Pathsはnilです。
	// ソースファイルのリストを取得するには、Table.Filesのキーを使用します。
	Paths []Sym
}

Objは、シンボルテーブル内の一連の関数を表します。

バイナリを別々のObjに分割する具体的な方法は、シンボルテーブル形式の内部詳細です。

Goの初期のバージョンでは、各ソースファイルが異なるObjになりました。

Go 1とGo 1.1では、各パッケージはすべてのGoソースに対して1つのObjを生成し、 Cソースファイルごとに1つのObjを生成しました。

Go 1.2では、プログラム全体に対して単一のObjが存在します。

type Sym

type Sym struct {
	Value  uint64
	Type   byte
	Name   string
	GoType uint64
	// このシンボルが関数シンボルである場合、対応するFunc
	Func *Func
	// contains filtered or unexported fields
}

Symは、単一のシンボルテーブルエントリを表します。

func (*Sym) BaseName

func (s *Sym) BaseName() string

BaseNameは、パッケージ名やレシーバ名を除いたシンボル名を返します。

func (*Sym) PackageName

func (s *Sym) PackageName() string

PackageNameは、シンボル名のパッケージ部分を返します。 パッケージ部分がない場合は空の文字列を返します。

func (*Sym) ReceiverName

func (s *Sym) ReceiverName() string

ReceiverNameは、このシンボルのレシーバタイプ名を返します。 レシーバ名がない場合は空の文字列を返します。レシーバ名は、 s.Nameがパッケージ名で完全に指定されている場合にのみ検出されます。

func (*Sym) Static

func (s *Sym) Static() bool

Staticは、このシンボルが静的(ファイルの外部からは見えない)であるかどうかを報告します。

type Table

type Table struct {
	Syms  []Sym
	Funcs []Func
	Files map[string]*Obj
	Objs  []Obj
	// contains filtered or unexported fields
}

TableはGoのシンボルテーブルを表します。プログラムからデコードされたすべての シンボルを保存し、シンボル、名前、アドレス間の変換を行うメソッドを提供します。

func NewTable

func NewTable(symtab []byte, pcln *LineTable) (*Table, error)

NewTableはGoのシンボルテーブル(ELFの".gosymtab"セクション)をデコードし、 メモリ内表現を返します。 Go 1.3以降、Goのシンボルテーブルにはシンボルデータが含まれなくなりました。

func (*Table) LineToPC

func (t *Table) LineToPC(file string, line int) (pc uint64, fn *Func, err error)

LineToPCは、指定されたファイルの指定された行で最初のプログラムカウンタを検索します。 この行を検索中にエラーが発生した場合、UnknownPathErrorまたはUnknownLineErrorを返します。

func (*Table) LookupFunc

func (t *Table) LookupFunc(name string) *Func

LookupFuncは、指定された名前を持つテキスト、データ、またはbssシンボルを返します。 そのようなシンボルが見つからない場合はnilを返します。

func (*Table) LookupSym

func (t *Table) LookupSym(name string) *Sym

LookupSymは、指定された名前を持つテキスト、データ、またはbssシンボルを返します。 そのようなシンボルが見つからない場合はnilを返します。

func (*Table) PCToFunc

func (t *Table) PCToFunc(pc uint64) *Func

PCToFuncは、プログラムカウンタpcを含む関数を返します。 そのような関数がない場合はnilを返します。

func (*Table) PCToLine

func (t *Table) PCToLine(pc uint64) (file string, line int, fn *Func)

PCToLineは、プログラムカウンタに対する行番号情報を検索します。 情報がない場合は、fn == nilを返します。

func (*Table) SymByAddr

func (t *Table) SymByAddr(addr uint64) *Sym

SymByAddrは、指定されたアドレスで開始するテキスト、データ、またはbssシンボルを返します。

type UnknownFileError

type UnknownFileError string

UnknownFileErrorは、シンボルテーブル内で特定のファイルを見つけることができなかったことを表すエラーです。

func (UnknownFileError) Error

func (e UnknownFileError) Error() string

type UnknownLineError

type UnknownLineError struct {
	File string
	Line int
}

UnknownLineErrorは、行をプログラムカウンタにマッピングできなかったことを表すエラーです。 これは、行がファイルの範囲を超えているか、指定された行にコードがないためです。

func (*UnknownLineError) Error

func (e *UnknownLineError) Error() string

Jump to

Keyboard shortcuts

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