ssadb

package
v1.3.4-alpha8 Latest Latest
Warning

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

Go to latest
Published: Jun 30, 2024 License: AGPL-3.0 Imports: 22 Imported by: 0

Documentation

Index

Constants

View Source
const (
	NameMatch int = 1
	KeyMatch      = 1 << 1
	BothMatch     = NameMatch | KeyMatch
)

type MatchMode int

Variables

View Source
var SSAProjectTables = []any{

	&IrCode{},

	&IrVariable{},

	&IrScopeNode{},

	&IrSource{}, &IrType{},
}

Functions

func AllPrograms

func AllPrograms(db *gorm.DB) []string

func DeleteProgram

func DeleteProgram(db *gorm.DB, program string)

func ExactSearchVariable added in v1.3.3

func ExactSearchVariable(DB *gorm.DB, mod int, value string) chan int64

func GetDB added in v1.3.3

func GetDB() *gorm.DB

func GetIrSourceFromHash added in v1.3.3

func GetIrSourceFromHash(hash string) (*memedit.MemEditor, error)

GetIrSourceFromHash fetch editor from cache by hash(md5)

func GetSSASaveTypeCost

func GetSSASaveTypeCost() time.Duration

func GetSSASourceCodeCost

func GetSSASourceCodeCost() time.Duration

func GetSSAVariableCost

func GetSSAVariableCost() time.Duration

func GetType

func GetType(id int) (int, string, string, error)

func GlobSearchVariable added in v1.3.3

func GlobSearchVariable(DB *gorm.DB, mod int, value string) chan int64

func RegexpSearchVariable added in v1.3.3

func RegexpSearchVariable(DB *gorm.DB, mod int, value string) chan int64

func SaveClassInstance

func SaveClassInstance(db *gorm.DB, program, class string, instIDs []int64) error

func SaveIrSource added in v1.3.3

func SaveIrSource(editor *memedit.MemEditor, hash string) error

func SaveType

func SaveType(kind int, str string, extra string) int

func SaveVariable

func SaveVariable(db *gorm.DB, program, variable string, insts []SSAValue) error

func YieldIrCodesProgramName added in v1.3.3

func YieldIrCodesProgramName(db *gorm.DB, ctx context.Context, program string) chan *IrCode

Types

type Int64Map

type Int64Map []item

func (*Int64Map) Append added in v1.3.3

func (m *Int64Map) Append(key, value int64)

func (Int64Map) ForEach added in v1.3.3

func (m Int64Map) ForEach(fn func(key, value int64))

func (*Int64Map) Scan

func (m *Int64Map) Scan(value any) error

func (Int64Map) Value

func (m Int64Map) Value() (driver.Value, error)

type Int64Slice

type Int64Slice []int64

Int64Slice 是一个自定义类型,用于处理 []int64 的序列化和反序列化

func (*Int64Slice) Scan

func (us *Int64Slice) Scan(value interface{}) error

Scan 实现了 sql.Scanner 接口,允许从数据库读取值时将其转换回 Int64Slice 类型

func (Int64Slice) Value

func (us Int64Slice) Value() (driver.Value, error)

Value 实现了 driver.Valuer 接口,允许将 Int64Slice 转换为一个适合存储在数据库中的形式

type IrCode

type IrCode struct {
	gorm.Model

	ProgramName string `json:"program_name" gorm:"index"`
	PackageName string `json:"package_name" gorm:"index"`

	// source code
	SourceCodeStartOffset int64  `json:"source_code_start_offset"`
	SourceCodeEndOffset   int64  `json:"source_code_end_offset"`
	SourceCodeHash        string `json:"source_code_hash"` // default md5

	// opcode
	Opcode     int64  `json:"opcode"`
	OpcodeName string `json:"opcode_name"`

	// just for binary and unary operator
	OpcodeOperator string `json:"opcode_operator"`

	// basic info
	Name             string `json:"name"`
	VerboseName      string `json:"verbose_name"`
	ShortVerboseName string `json:"short_verbose_name"`
	String           string `json:"string"`

	// any IrCode in one block inner one  function
	CurrentBlock    int64 `json:"current_block"`
	CurrentFunction int64 `json:"current_function"`

	// FunctionDefs
	IsFunction     bool       `json:"is_function"`
	FormalArgs     Int64Slice `json:"formal_args" gorm:"type:text"`
	FreeValues     Int64Slice `json:"free_values" gorm:"type:text"`
	MemberCallArgs Int64Slice `json:"formal_member_call_args" gorm:"type:text"`

	SideEffects      Int64Slice `json:"side_effects" gorm:"type:text"`
	IsVariadic       bool       `json:"is_variadic"`
	ReturnCodes      Int64Slice `json:"return_codes" gorm:"type:text"`
	IsExternal       bool       `json:"is_external"`
	CodeBlocks       Int64Slice `json:"code_blocks" gorm:"type:text"`
	EnterBlock       int64      `json:"enter_block"`
	ExitBlock        int64      `json:"exit_block"`
	DeferBlock       int64      `json:"defer_block"`
	ChildrenFunction Int64Slice `json:"children_function" gorm:"type:text"`
	ParentFunction   int64      `json:"parent_function"`

	// block
	IsBlock   bool       `json:"is_block"`
	PredBlock Int64Slice `json:"pred_block" gorm:"type:text"`
	SuccBlock Int64Slice `json:"succ_block" gorm:"type:text"`
	Phis      Int64Slice `json:"phis_in_block" gorm:"type:text"`

	// Use-Def Chains Relation
	Defs  Int64Slice `json:"defs" gorm:"type:text"`
	Users Int64Slice `json:"users" gorm:"type:text"`
	// this is user is call and method is this IR self
	CalledBy Int64Slice `json:"is_called_by" gorm:"type:text"`

	// OOP Supporting
	IsObject       bool
	ObjectMembers  Int64Map `json:"object_members" gorm:"type:text"`
	IsObjectMember bool
	ObjectParent   int64 `json:"object_parent"`
	ObjectKey      int64 `json:"object_key"`

	// Maskable
	MaskedCodes Int64Slice `json:"masked_codes" gorm:"type:text"`
	IsMasked    bool       `json:"is_masked"`

	// Variable
	Variable StringSlice `json:"variable" gorm:"type:text"`

	// compile hash means: hash[ (file-content)+(program-name)+(package-name)+(program-index) ]
	ProgramCompileHash string `json:"program_compile_hash" gorm:"index"`

	// type
	TypeId int `json:"type_id"`

	// reference
	Reference Int64Slice `json:"reference" gorm:"type:text"`

	// not important information
	ExtraInformation string `json:"extra_information"`
}

func GetIrByVariable

func GetIrByVariable(db *gorm.DB, program, name string) []*IrCode

func GetIrCodeById

func GetIrCodeById(db *gorm.DB, id int64) *IrCode

func RequireIrCode

func RequireIrCode(db *gorm.DB, program string) (uint, *IrCode)

func (*IrCode) GetExtraInfo added in v1.3.3

func (r *IrCode) GetExtraInfo() map[string]any

func (*IrCode) GetIdInt added in v1.3.3

func (r *IrCode) GetIdInt() int

func (*IrCode) GetIdInt64 added in v1.3.3

func (r *IrCode) GetIdInt64() int64

func (*IrCode) GetSourceCode added in v1.3.3

func (r *IrCode) GetSourceCode(db *gorm.DB) string

func (*IrCode) GetSourceCodeContext added in v1.3.3

func (r *IrCode) GetSourceCodeContext(db *gorm.DB, n int) string

func (*IrCode) GetStartAndEndPositions added in v1.3.3

func (r *IrCode) GetStartAndEndPositions(db *gorm.DB) (*memedit.MemEditor, memedit.PositionIf, memedit.PositionIf, error)

func (*IrCode) IsEmptySourceCodeHash added in v1.3.3

func (r *IrCode) IsEmptySourceCodeHash() bool

func (*IrCode) SetExtraInfo added in v1.3.3

func (r *IrCode) SetExtraInfo(params map[string]any)

func (*IrCode) Show added in v1.3.3

func (i *IrCode) Show()

func (*IrCode) VerboseString added in v1.3.3

func (i *IrCode) VerboseString() string

type IrScopeNode added in v1.3.3

type IrScopeNode struct {
	gorm.Model

	ProgramName   string     `json:"program_name" gorm:"index"`
	ParentNodeId  int64      `json:"parent_node_id" gorm:"index"`
	ChildrenNodes Int64Slice `json:"children" gorm:"type:text"`
	ExtraInfo     string     `json:"extraInfo"`
}

func GetIrScope added in v1.3.3

func GetIrScope(id int64) (*IrScopeNode, error)

func RequireScopeNode added in v1.3.3

func RequireScopeNode() (int64, *IrScopeNode)

type IrSource added in v1.3.3

type IrSource struct {
	SourceCodeHash string `json:"source_code_hash" gorm:"unique_index"` // default md5
	QuotedCode     string `json:"quoted_code"`
	FileUrl        string `json:"file_url"`
	Filename       string `json:"filename"`
	Filepath       string `json:"filepath"`
}

type IrType

type IrType struct {
	gorm.Model
	Kind             int    `json:"kind"`
	String           string `json:"string"`
	ExtraInformation string `json:"extra_information"`
	Hash             string `json:"hash" gorm:"unique_index"`
}

func (*IrType) BeforeCreate

func (t *IrType) BeforeCreate() error

func (*IrType) BeforeSave

func (t *IrType) BeforeSave() error

func (*IrType) BeforeUpdate

func (t *IrType) BeforeUpdate() error

func (*IrType) CalcHash

func (t *IrType) CalcHash() string

type IrVariable

type IrVariable struct {
	gorm.Model

	ProgramName  string `json:"program_name" gorm:"index"`
	VariableName string `json:"variable_name" gorm:"index"`

	IsClassInstance      bool `json:"is_class_instance"`
	IsAnnotationInstance bool `json:"is_annotation_instance"`

	// OOP Index
	ObjectID        int64  `json:"object_id" gorm:"index"`
	SliceMemberName string `json:"slice_member_name" gorm:"index"`
	FieldMemberName string `json:"field_member_name" gorm:"index"`

	InstructionID Int64Slice `json:"instruction_id" gorm:"type:text"`
}

func GetVariable added in v1.3.3

func GetVariable(db *gorm.DB, program, variable string) (*IrVariable, error)

type SSAValue

type SSAValue interface {
	IsAnnotation() bool
	GetId() int64
}

type StringSlice

type StringSlice []string

func (*StringSlice) Scan

func (ss *StringSlice) Scan(value interface{}) error

func (StringSlice) Value

func (us StringSlice) Value() (driver.Value, error)

Jump to

Keyboard shortcuts

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