介绍
关于Codeql,参考之前的文章:placeholder
这里将会基于codeql-go的源码来探索codeql的原理。
准备工作
extractor
trap文件
trap文件是一个流文件,每次通过Emit调用往其中写入下列数据之一:
- 全局key和id的映射,例如:
id=key, 其中,id是从10000自增的整数; key的例子有:universe;scope,表示全局的scope所对应的id;encoding/json;package则表示encoding/json这个包的id;{scopeID},name;objectscope中声明的对象{id},methodName;method表示某个类型的方法所对应的id;1;basictype对应types.BasicKind,基本类型,如1=bool,2=int...;2,{elemTypeID};arraytype, 数组类型,2表示长度;{elemTypeID};slicetypeslice类型field0Name,{field0TypeID},field0Tag,field1Name,{field1TypeID},field1Tag...;structtype结构体类型{elemTypeID};pointer指针类型method0Id,{method0TypeID},method1Id,{method1TypeID}...;interfacetypeinterface类型,注意,如果两个interface具有完全一样的方法,则它们的ID是相同的{type0},{type1}...;tupletypeTuple类型,即返回多个值的函数{paramType0},{paramType1}...;{retType0},{retType1}...;signaturetype函数签名{keyTypeID},{valueTypeID};maptypemap类型Dir,{elemTypeID};chantypechan类型{underlyingTypeID};namedtype使用type关键子定义的类型;type X struct{},type Kind intpath;folder目录path;sourcefile源文件
- 表的一行,例如:
tableName(1,"2","3");
内容参考: trap文件示例
在一次解析的过程中,存在一个trap文件的根目录,每个包都会在这个根目录下生成对应的trap文件。
表
表结构定义:
// extractor/dbscheme/dbscheme.go
// A Table represents a database table
type Table struct {
name string
schema []Column
keysets [][


2143

被折叠的 条评论
为什么被折叠?



