taint

package
v0.0.7 Latest Latest
Warning

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

Go to latest
Published: Sep 4, 2022 License: MIT Imports: 15 Imported by: 0

Documentation

Index

Constants

View Source
const PrintBody = ""

PrintBody represents the name of the function should be printed

View Source
const Store = "gostd.json"

Store represents the path of the passthrough data

Variables

View Source
var Gostd = []string{"archive...", "bufio...", "builtin...", "bytes...",
	"compress...", "container...", "context...", "crypto...",
	"database...", "debug...", "embed...", "encoding...", "errors...", "expvar...",
	"flag...", "fmt...", "go...", "hash...", "html...",
	"image...", "index...", "io...", "log...", "math...", "mime...",
	"net...", "os...", "path...", "plugin...", "relect...", "regexp...", "runtime...",
	"sort...", "strconv...", "strings...", "sync...", "syscall...",
	"text...", "time...", "unicode...", "unsafe..."}

Gostd reprents all go standard library's PkgPath

Functions

func Fetch

func Fetch(passThroughContainer *map[string][][]int, src string) error

Fetch loads passthrougth data from target source

func Persist

func Persist(passThroughContainer *map[string][][]int, dst string) error

Persist stores passthrough data to target destination

func Run

func Run(f *ssa.Function, c *TaintConfig)

Run kicks off a taint analysis on a function

Types

type Imethod added in v0.0.6

type Imethod struct {
	I *types.Interface
	// contains filtered or unexported fields
}

Imethod represents an interface method I.m. (There's no go/types object for it; a *types.Func may be shared by many interfaces due to interface embedding.)

type InterfaceHierarchy added in v0.0.6

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

InterfaceHierarchy represents implementation relations

func Build added in v0.0.6

func Build(allFuncs *map[*ssa.Function]bool) *InterfaceHierarchy

Build returns an InterfaceHierarchy

func (*InterfaceHierarchy) LookupMethods added in v0.0.6

func (i *InterfaceHierarchy) LookupMethods(I *types.Interface, m *types.Func) []*ssa.Function

LookupMethods returns an interface method's implementations

type Runner

type Runner struct {
	PkgPath []string
	Debug   bool
	SrcPath string
	DstPath string
}

Runner represents a analysis runner

func NewRunner

func NewRunner(PkgPath ...string) *Runner

NewRunner returns a *taint.Runner

func (*Runner) Run

func (r *Runner) Run() error

Run kick off an analysis

type TaintAnalysis

type TaintAnalysis struct {
	scalar.BaseFlowAnalysis
	// contains filtered or unexported fields
}

TaintAnalysis represents a taint analysis

func New

New creates a TaintAnalysis

func (*TaintAnalysis) Computations

func (a *TaintAnalysis) Computations() int

Computations limits number of computations on a flow graph

func (*TaintAnalysis) End

func (a *TaintAnalysis) End(universe []*entry.Entry)

End handles result of analysis

func (*TaintAnalysis) FlowThrougth

func (a *TaintAnalysis) FlowThrougth(inMap *map[any]any, unit ssa.Instruction, outMap *map[any]any)

FlowThrougth calculates outMap based on inMap and unit

func (*TaintAnalysis) MergeInto

func (a *TaintAnalysis) MergeInto(unit ssa.Instruction, inout *map[any]any, in *map[any]any)

MergeInto merges from in to inout based on unit

func (*TaintAnalysis) NewInitalFlow

func (a *TaintAnalysis) NewInitalFlow() *map[any]any

NewInitalFlow returns a new flow

type TaintConfig

type TaintConfig struct {
	PassThroughContainer *map[string][][]int
	InitMap              *map[string]*ssa.Function
	History              *map[string]bool
	InterfaceHierarchy   *InterfaceHierarchy
	Debug                bool
}

TaintConfig represents a configuration for taint analysis

type TaintSwitcher

type TaintSwitcher struct {
	switcher.BaseSwitcher
	// contains filtered or unexported fields
}

TaintSwitcher represents a switcher for taint analysis

func (*TaintSwitcher) CaseAlloc

func (s *TaintSwitcher) CaseAlloc(inst *ssa.Alloc)

CaseAlloc accepts a Alloc instruction

func (*TaintSwitcher) CaseBinOp

func (s *TaintSwitcher) CaseBinOp(inst *ssa.BinOp)

CaseBinOp accepts a BinOp instruction

func (*TaintSwitcher) CaseCall

func (s *TaintSwitcher) CaseCall(inst *ssa.Call)

CaseCall accepts a Call instruction

func (*TaintSwitcher) CaseChangeInterface

func (s *TaintSwitcher) CaseChangeInterface(inst *ssa.ChangeInterface)

CaseChangeInterface accepts a ChangeInterface instruction

func (*TaintSwitcher) CaseChangeType

func (s *TaintSwitcher) CaseChangeType(inst *ssa.ChangeType)

CaseChangeType accepts a ChangeType instruction

func (*TaintSwitcher) CaseConvert

func (s *TaintSwitcher) CaseConvert(inst *ssa.Convert)

CaseConvert accepts a Convert instruction

func (*TaintSwitcher) CaseExtract

func (s *TaintSwitcher) CaseExtract(inst *ssa.Extract)

CaseExtract accepts a Extract instruction

func (*TaintSwitcher) CaseField

func (s *TaintSwitcher) CaseField(inst *ssa.Field)

CaseField accepts a Field instruction

func (*TaintSwitcher) CaseFieldAddr

func (s *TaintSwitcher) CaseFieldAddr(inst *ssa.FieldAddr)

CaseFieldAddr accepts a FieldAddr instruction

func (*TaintSwitcher) CaseIndex

func (s *TaintSwitcher) CaseIndex(inst *ssa.Index)

CaseIndex accepts an Index instruction

func (*TaintSwitcher) CaseIndexAddr

func (s *TaintSwitcher) CaseIndexAddr(inst *ssa.IndexAddr)

CaseIndexAddr accepts an IndexAddr instruction

func (*TaintSwitcher) CaseLookup

func (s *TaintSwitcher) CaseLookup(inst *ssa.Lookup)

CaseLookup accepts a Lookup instruction

func (*TaintSwitcher) CaseMakeChan

func (s *TaintSwitcher) CaseMakeChan(inst *ssa.MakeChan)

CaseMakeChan accepts a MakeChan instruction

func (*TaintSwitcher) CaseMakeClosure

func (s *TaintSwitcher) CaseMakeClosure(inst *ssa.MakeClosure)

CaseMakeClosure accepts a MakeClosure instruction

func (*TaintSwitcher) CaseMakeInterface

func (s *TaintSwitcher) CaseMakeInterface(inst *ssa.MakeInterface)

CaseMakeInterface accepts a MakeInterface instruction

func (*TaintSwitcher) CaseMakeMap

func (s *TaintSwitcher) CaseMakeMap(inst *ssa.MakeMap)

CaseMakeMap accepts a MakeMap instruction

func (*TaintSwitcher) CaseMakeSlice

func (s *TaintSwitcher) CaseMakeSlice(inst *ssa.MakeSlice)

CaseMakeSlice accepts a MakeSlice instruction

func (*TaintSwitcher) CaseMapUpdate

func (s *TaintSwitcher) CaseMapUpdate(inst *ssa.MapUpdate)

CaseMapUpdate accepts a MapUpdate instruction

func (*TaintSwitcher) CaseNext

func (s *TaintSwitcher) CaseNext(inst *ssa.Next)

CaseNext accepts a Next instruction

func (*TaintSwitcher) CasePhi

func (s *TaintSwitcher) CasePhi(inst *ssa.Phi)

CasePhi accepts a Phi instruction

func (*TaintSwitcher) CaseRange

func (s *TaintSwitcher) CaseRange(inst *ssa.Range)

CaseRange accepts a Range instruction

func (*TaintSwitcher) CaseReturn

func (s *TaintSwitcher) CaseReturn(inst *ssa.Return)

CaseReturn accepts a Return instruction

func (*TaintSwitcher) CaseSelect

func (s *TaintSwitcher) CaseSelect(inst *ssa.Select)

CaseSelect accepts a Select instruction

func (*TaintSwitcher) CaseSend

func (s *TaintSwitcher) CaseSend(inst *ssa.Send)

CaseSend accepts a Send instruction

func (*TaintSwitcher) CaseSlice

func (s *TaintSwitcher) CaseSlice(inst *ssa.Slice)

CaseSlice accepts a Slice instruction

func (*TaintSwitcher) CaseStore

func (s *TaintSwitcher) CaseStore(inst *ssa.Store)

CaseStore accepts a Store instruction

func (*TaintSwitcher) CaseTypeAssert

func (s *TaintSwitcher) CaseTypeAssert(inst *ssa.TypeAssert)

CaseTypeAssert accepts a TypeAssert instruction

func (*TaintSwitcher) CaseUnOp

func (s *TaintSwitcher) CaseUnOp(inst *ssa.UnOp)

CaseUnOp accepts a UnOp instruction

Jump to

Keyboard shortcuts

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