frame

package
v1.1.0 Latest Latest
Warning

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

Go to latest
Published: Aug 16, 2018 License: MIT 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

func DwarfEndian

func DwarfEndian(infoSec []byte) binary.ByteOrder

DwarfEndian determines the endianness of the DWARF by using the version number field in the debug_info section Trick borrowed from "debug/dwarf".New()

Types

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 DWRule

type DWRule struct {
	Rule       Rule
	Offset     int64
	Reg        uint64
	Expression []byte
}

type FrameContext

type FrameContext struct {
	CFA  DWRule
	Regs map[uint64]DWRule

	RetAddrReg uint64
	// contains filtered or unexported fields
}

func (*FrameContext) ExecuteDwarfProgram

func (frame *FrameContext) ExecuteDwarfProgram()

func (*FrameContext) ExecuteUntilPC

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

Execute dwarf instructions.

type FrameDescriptionEntries

type FrameDescriptionEntries []*FrameDescriptionEntry

func NewFrameIndex

func NewFrameIndex() FrameDescriptionEntries

func Parse

func Parse(data []byte, order binary.ByteOrder) 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

Returns the Frame Description Entry for the given PC.

type FrameDescriptionEntry

type FrameDescriptionEntry struct {
	Length       uint32
	CIE          *CommonInformationEntry
	Instructions []byte
	// contains filtered or unexported fields
}

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

func (*FrameDescriptionEntry) Begin

func (fde *FrameDescriptionEntry) Begin() uint64

Address of first location for this frame.

func (*FrameDescriptionEntry) Cover

func (fde *FrameDescriptionEntry) Cover(addr uint64) bool

Returns whether or not the given address is within the bounds of this frame.

func (*FrameDescriptionEntry) End

func (fde *FrameDescriptionEntry) End() uint64

Address of last location for this frame.

func (*FrameDescriptionEntry) EstablishFrame

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

Set up frame for the given PC.

func (*FrameDescriptionEntry) LessThan

func (frame *FrameDescriptionEntry) LessThan(pc uint64) bool

type NoFDEForPCError

type NoFDEForPCError struct {
	PC uint64
}

func (*NoFDEForPCError) Error

func (err *NoFDEForPCError) Error() string

type Rule

type Rule byte

Rules defined for register values.

const (
	RuleUndefined Rule = iota
	RuleSameVal
	RuleOffset
	RuleValOffset
	RuleRegister
	RuleExpression
	RuleValExpression
	RuleArchitectural
	RuleCFA          // Value is rule.Reg + rule.Offset
	RuleFramePointer // Value is stored at address rule.Reg + rule.Offset, but only if it's less than the current CFA, otherwise same value
)

Jump to

Keyboard shortcuts

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