frame

package
v0.0.0-...-a838feb Latest Latest
Warning

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

Go to latest
Published: Jul 18, 2021 License: GPL-3.0 Imports: 5 Imported by: 0

Documentation

Overview

Package frame contains data structures and related functions for parsing and searching through Dwarf .debug_frame data.

Index

Constants

View Source
const (
	DW_OP_addr    = 0x03
	DW_OP_const1s = 0x09
)

Operation opcodes

View Source
const (
	DW_OP_const2u = 0x0a
	DW_OP_const2s = 0x0b
	DW_OP_const4u = iota
	DW_OP_const4s
	DW_OP_const8u
	DW_OP_const8s
	DW_OP_constu
	DW_OP_consts
	DW_OP_dup
	DW_OP_drop
	DW_OP_over
	DW_OP_pick
	DW_OP_swap
	DW_OP_rot
	DW_OP_xderef
	DW_OP_abs
	DW_OP_and
	DW_OP_div
	DW_OP_minus
	DW_OP_mod
	DW_OP_mul
	DW_OP_neg
	DW_OP_not
	DW_OP_or
	DW_OP_plus
	DW_OP_plus_uconst
	DW_OP_shl
	DW_OP_shr
	DW_OP_shra
	DW_OP_xor
	DW_OP_skip
	DW_OP_bra
	DW_OP_eq
	DW_OP_ge
	DW_OP_gt
	DW_OP_le
	DW_OP_lt
	DW_OP_ne
)
View Source
const (
	DW_OP_lit0 = 0x30
	DW_OP_lit1 = 0x31
	DW_OP_lit2 = iota
	DW_OP_lit3
	DW_OP_lit4
	DW_OP_lit5
	DW_OP_lit6
	DW_OP_lit7
	DW_OP_lit8
	DW_OP_lit9
	DW_OP_lit10
	DW_OP_lit11
	DW_OP_lit12
	DW_OP_lit13
	DW_OP_lit14
	DW_OP_lit15
	DW_OP_lit16
	DW_OP_lit17
	DW_OP_lit18
	DW_OP_lit19
	DW_OP_lit20
	DW_OP_lit21
	DW_OP_lit22
	DW_OP_lit23
	DW_OP_lit24
	DW_OP_lit25
	DW_OP_lit26
	DW_OP_lit27
	DW_OP_lit28
	DW_OP_lit29
	DW_OP_lit30
	DW_OP_lit31
	DW_OP_reg0
	DW_OP_reg1
	DW_OP_reg2
	DW_OP_reg3
	DW_OP_reg4
	DW_OP_reg5
	DW_OP_reg6
	DW_OP_reg7
	DW_OP_reg8
	DW_OP_reg9
	DW_OP_reg10
	DW_OP_reg11
	DW_OP_reg12
	DW_OP_reg13
	DW_OP_reg14
	DW_OP_reg15
	DW_OP_reg16
	DW_OP_reg17
	DW_OP_reg18
	DW_OP_reg19
	DW_OP_reg20
	DW_OP_reg21
	DW_OP_reg22
	DW_OP_reg23
	DW_OP_reg24
	DW_OP_reg25
	DW_OP_reg26
	DW_OP_reg27
	DW_OP_reg28
	DW_OP_reg29
	DW_OP_reg30
	DW_OP_reg31
	DW_OP_breg0
	DW_OP_breg1
	DW_OP_breg2
	DW_OP_breg3
	DW_OP_breg4
	DW_OP_breg5
	DW_OP_breg6
	DW_OP_breg7
	DW_OP_breg8
	DW_OP_breg9
	DW_OP_breg10
	DW_OP_breg11
	DW_OP_breg12
	DW_OP_breg13
	DW_OP_breg14
	DW_OP_breg15
	DW_OP_breg16
	DW_OP_breg17
	DW_OP_breg18
	DW_OP_breg19
	DW_OP_breg20
	DW_OP_breg21
	DW_OP_breg22
	DW_OP_breg23
	DW_OP_breg24
	DW_OP_breg25
	DW_OP_breg26
	DW_OP_breg27
	DW_OP_breg28
	DW_OP_breg29
	DW_OP_breg30
	DW_OP_breg31
	DW_OP_regx
	DW_OP_fbreg
	DW_OP_bregx
	DW_OP_piece
	DW_OP_deref_size
	DW_OP_xderef_size
	DW_OP_nop
	DW_OP_push_object_address
	DW_OP_call2
	DW_OP_call4
	DW_OP_call_ref
	DW_OP_form_tls_address
	DW_OP_call_frame_cfa
	DW_OP_bit_piece

	DW_OP_lo_user = 0xe0
	DW_OP_hi_user = 0xff
)
View Source
const (
	DW_CFA_nop                = 0x0        // No ops
	DW_CFA_set_loc            = 0x01       // op1: address
	DW_CFA_advance_loc1       = iota       // op1: 1-bytes delta
	DW_CFA_advance_loc2                    // op1: 2-byte delta
	DW_CFA_advance_loc4                    // op1: 4-byte delta
	DW_CFA_offset_extended                 // op1: ULEB128 register, op2: ULEB128 offset
	DW_CFA_restore_extended                // op1: ULEB128 register
	DW_CFA_undefined                       // op1: ULEB128 register
	DW_CFA_same_value                      // op1: ULEB128 register
	DW_CFA_register                        // op1: ULEB128 register, op2: ULEB128 register
	DW_CFA_remember_state                  // No ops
	DW_CFA_restore_state                   // No ops
	DW_CFA_def_cfa                         // op1: ULEB128 register, op2: ULEB128 offset
	DW_CFA_def_cfa_register                // op1: ULEB128 register
	DW_CFA_def_cfa_offset                  // op1: ULEB128 offset
	DW_CFA_def_cfa_expression              // op1: BLOCK
	DW_CFA_expression                      // op1: ULEB128 register, op2: BLOCK
	DW_CFA_offset_extended_sf              // op1: ULEB128 register, op2: SLEB128 BLOCK
	DW_CFA_def_cfa_sf                      // op1: ULEB128 register, op2: SLEB128 offset
	DW_CFA_def_cfa_offset_sf               // op1: SLEB128 offset
	DW_CFA_val_offset                      // op1: ULEB128, op2: ULEB128
	DW_CFA_val_offset_sf                   // op1: ULEB128, op2: SLEB128
	DW_CFA_val_expression                  // op1: ULEB128, op2: BLOCK
	DW_CFA_lo_user            = 0x1c       // op1: BLOCK
	DW_CFA_hi_user            = 0x3f       // op1: ULEB128 register, op2: BLOCK
	DW_CFA_advance_loc        = (0x1 << 6) // High 2 bits: 0x1, low 6: delta
	DW_CFA_offset             = (0x2 << 6) // High 2 bits: 0x2, low 6: register
	DW_CFA_restore            = (0x3 << 6) // High 2 bits: 0x3, low 6: register
)

Instructions used to recreate the table from the .debug_frame data.

Variables

This section is empty.

Functions

This section is empty.

Types

type Addr

type Addr uint64

func (Addr) Less

func (a Addr) Less(item rbtree.Item) bool

func (Addr) More

func (a Addr) More(item rbtree.Item) bool

type CommonInformationEntry

type CommonInformationEntry struct {
	Length                uint32
	CIE_id                uint32
	Version               uint8
	Augmentation          string
	CodeAlignmentFactor   uint64
	DataAlignmentFactor   int64
	ReturnAddressRegister uint64
	InitialInstructions   []byte
}

Represents a Common Information Entry in the Dwarf .debug_frame section.

type CurrentFrameAddress

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

type DWRule

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

type FrameContext

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

func (*FrameContext) CFAOffset

func (fctx *FrameContext) CFAOffset() int64

func (*FrameContext) ExecuteDwarfProgram

func (frame *FrameContext) ExecuteDwarfProgram()

execute bytecode instructions in current FDE

func (*FrameContext) ExecuteUntilPC

func (frame *FrameContext) ExecuteUntilPC(instructions []byte)

Execute dwarf instructions.

type FrameDescriptionEntries

type FrameDescriptionEntries struct {
	*rbtree.RedBlackTree
}

FDEs, stored as rbtree, in order to lookup covering pc more quickly

func NewFrameIndex

func NewFrameIndex() *FrameDescriptionEntries

func Parse

func Parse(data []byte) *FrameDescriptionEntries

Parse takes in data (a byte slice) and returns a slice of CommonInformationEntry structures. Each CommonInformationEntry has a slice of FrameDescriptionEntry structures.

func (*FrameDescriptionEntries) FDEForPC

type FrameDescriptionEntry

type FrameDescriptionEntry struct {
	Length       uint32
	CIE          *CommonInformationEntry
	AddressRange *addrange
	Instructions []byte
}

Represents a Frame Descriptor Entry in the Dwarf .debug_frame section.

func (*FrameDescriptionEntry) EstablishFrame

func (fde *FrameDescriptionEntry) EstablishFrame(pc uint64) *FrameContext

rebuild the covering FDE based upon current pc

func (*FrameDescriptionEntry) Less

func (frame *FrameDescriptionEntry) Less(item rbtree.Item) bool

func (*FrameDescriptionEntry) More

func (frame *FrameDescriptionEntry) More(item rbtree.Item) bool

func (*FrameDescriptionEntry) ReturnAddressOffset

func (fde *FrameDescriptionEntry) ReturnAddressOffset(pc uint64) int64

return return address of current pc

Jump to

Keyboard shortcuts

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