entity

package
v0.3.0 Latest Latest
Warning

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

Go to latest
Published: Apr 28, 2024 License: AGPL-3.0 Imports: 12 Imported by: 0

Documentation

Index

Constants

View Source
const (
	AddrTypeUnknown AddrType = "unknown" // it exists, but should never be collected
	AddrTypeText             = "text"    // for text section
	AddrTypeData             = "data"    // data / rodata section
)
View Source
const (
	AddrSourceGoPclntab AddrSourceType = "pclntab"
	AddrSourceSymbol                   = "symbol"
	AddrSourceDisasm                   = "disasm"
)

Variables

This section is empty.

Functions

This section is empty.

Types

type Addr

type Addr struct {
	*AddrPos

	Pkg      *Package  // package can be nil for cgo symbols
	Function *Function // for symbol source it will be a nil

	SourceType AddrSourceType

	Meta any
}

func (Addr) String

func (a Addr) String() string

type AddrCoverage

type AddrCoverage []*CoveragePart

AddrCoverage is a list of AddrPos, describe the coverage of the address space

func CleanCoverage added in v0.2.4

func CleanCoverage(cov AddrCoverage) (AddrCoverage, error)

func MergeAndCleanCoverage added in v0.2.4

func MergeAndCleanCoverage(coves []AddrCoverage) (AddrCoverage, error)

MergeAndCleanCoverage merge multiple AddrCoverage

type AddrPos

type AddrPos struct {
	Addr uint64
	Size uint64
	Type AddrType
}

func (*AddrPos) String added in v0.2.4

func (a *AddrPos) String() string

type AddrSourceType

type AddrSourceType = string

type AddrSpace

type AddrSpace map[uint64]*Addr

AddrSpace is a map of address to Addr

func MergeAddrSpace

func MergeAddrSpace(others ...AddrSpace) AddrSpace

func (AddrSpace) Get

func (a AddrSpace) Get(addr uint64) (ret *Addr, ok bool)

func (AddrSpace) Insert

func (a AddrSpace) Insert(addr *Addr)

func (AddrSpace) ToCleanCoverage added in v0.2.4

func (a AddrSpace) ToCleanCoverage() (AddrCoverage, error)

func (AddrSpace) ToDirtyCoverage

func (a AddrSpace) ToDirtyCoverage() AddrCoverage

ToDirtyCoverage get the coverage of the current address space

type AddrType

type AddrType = string

type CoveragePart

type CoveragePart struct {
	Pos   *AddrPos
	Addrs []*Addr
}

func (*CoveragePart) String added in v0.2.4

func (c *CoveragePart) String() string

type DisasmMeta added in v0.2.4

type DisasmMeta struct {
	Value string
}

type ErrAddrCoverageConflict

type ErrAddrCoverageConflict struct {
	Addr uint64
	Pos1 *CoveragePart
	Pos2 *CoveragePart
}

func (*ErrAddrCoverageConflict) Error

func (e *ErrAddrCoverageConflict) Error() string

type File

type File struct {
	FilePath  string
	Functions []*Function
	// contains filtered or unexported fields
}

func (*File) MarshalJSON

func (f *File) MarshalJSON() ([]byte, error)

type FuncType

type FuncType = string
const (
	FuncTypeFunction FuncType = "function"
	FuncTypeMethod   FuncType = "method"
)

type Function

type Function struct {
	Name     string   `json:"name"`
	Addr     uint64   `json:"addr"`
	Size     uint64   `json:"size"`
	Type     FuncType `json:"type"`
	Receiver string   `json:"receiver"` // only for methods
	File     *File    `json:"-"`
	// contains filtered or unexported fields
}

type GoPclntabMeta

type GoPclntabMeta struct {
	FuncName    string
	PackageName string
	Type        FuncType
	Receiver    string // for method only
	Filepath    string
}

type KnownAddr

type KnownAddr struct {
	Pclntab AddrSpace

	Symbol         AddrSpace
	SymbolCoverage AddrCoverage
}

func NewKnownAddr

func NewKnownAddr() *KnownAddr

func (*KnownAddr) BuildSymbolCoverage

func (f *KnownAddr) BuildSymbolCoverage()

func (*KnownAddr) InsertDisasm

func (f *KnownAddr) InsertDisasm(entry uint64, size uint64, fn *Function, meta DisasmMeta)

func (*KnownAddr) InsertPclntab

func (f *KnownAddr) InsertPclntab(entry uint64, size uint64, fn *Function, meta GoPclntabMeta)

func (*KnownAddr) InsertSymbol

func (f *KnownAddr) InsertSymbol(entry uint64, size uint64, p *Package, typ AddrType, meta SymbolMeta) *Addr

func (*KnownAddr) SymbolCovHas

func (f *KnownAddr) SymbolCovHas(entry uint64, size uint64) (AddrType, bool)

type Package

type Package struct {
	Name string      `json:"name"`
	Type PackageType `json:"type"`

	SubPackages PackageMap `json:"subPackages"`
	Files       []*File    `json:"files"`

	Size uint64 `json:"size"` // late filled

	// should not be used to calculate size,
	// since linker can create overlapped symbols.
	// relies on coverage.
	// currently only data symbol
	Symbols []*Symbol `json:"symbols"`

	// should have at least one of them
	GorePkg  *gore.Package `json:"-"`
	DebugMod *debug.Module `json:"-"`
	// contains filtered or unexported fields
}

func NewPackage

func NewPackage() *Package

func NewPackageWithGorePackage

func NewPackageWithGorePackage(gp *gore.Package, name string, typ PackageType, pclntab *gosym.Table) *Package

func (*Package) AddSymbol added in v0.2.4

func (p *Package) AddSymbol(addr uint64, size uint64, typ AddrType, name string, ap *Addr)

func (*Package) AssignPackageSize added in v0.2.4

func (p *Package) AssignPackageSize()

func (*Package) GetDisasmAddrSpace added in v0.2.4

func (p *Package) GetDisasmAddrSpace() AddrSpace

func (*Package) GetFunctionSizeRecursive added in v0.2.4

func (p *Package) GetFunctionSizeRecursive() uint64

func (*Package) GetFunctions

func (p *Package) GetFunctions() []*Function

func (*Package) GetPackageCoverage added in v0.2.4

func (p *Package) GetPackageCoverage() AddrCoverage

func (*Package) Merge

func (p *Package) Merge(rp *Package)

Merge p always hold an empty subpackage

type PackageMap

type PackageMap map[string]*Package

type PackageType

type PackageType = string
const (
	PackageTypeMain      PackageType = "main"
	PackageTypeStd       PackageType = "std"
	PackageTypeVendor    PackageType = "vendor"
	PackageTypeGenerated PackageType = "generated"
	PackageTypeUnknown   PackageType = "unknown"
)

type Section

type Section struct {
	Name string `json:"name"`

	Size     uint64 `json:"size"`
	FileSize uint64 `json:"file_size"`

	KnownSize uint64 `json:"known_size"`

	Offset uint64 `json:"offset"`
	End    uint64 `json:"end"`

	Addr    uint64 `json:"addr"`
	AddrEnd uint64 `json:"addr_end"`

	OnlyInMemory bool `json:"only_in_memory"`
	Debug        bool `json:"debug"`
}

type Symbol added in v0.2.4

type Symbol struct {
	Name string   `json:"name"`
	Addr uint64   `json:"addr"`
	Size uint64   `json:"size"`
	Type AddrType `json:"type"`
}

func NewSymbol added in v0.2.4

func NewSymbol(name string, addr, size uint64, typ AddrType) *Symbol

func (*Symbol) String added in v0.2.4

func (s *Symbol) String() string

type SymbolMeta

type SymbolMeta struct {
	SymbolName  string
	PackageName string
}

Jump to

Keyboard shortcuts

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