codeql 代码分析工具

介绍

vscode安装和使用

如果你想分析自己的代码仓库,你需要安装完整的codeql CLI, 推荐使用vscode扩展。

1.安装CLI工具和相应的库

整体工具组成如下:

~/codeql-home
  |
  |
   -- codeql
  |    |
  |     ---codeql      codeql可执行文件     
  |
   -- codeql-repo      code的代码仓库 git clone --depth 1 https://github.com/github/codeql codeql-repo
  |
   -- codeql-go        go分析器  git clone --depth 1 https://github.com/github/codeql-go
# 下载
# 解压到~/codeql-home
mkdir ~/codeql-home
cd ~/codeql-home
git clone --depth 1 https://github.com/github/codeql codeql-repo
git clone --depth 1 https://github.com/github/codeql-go

# 下载codeql-macosx.zip
unzip ~/Downloads/codeql-macosx.zip # 解压到 ~/codeql-home/codeql目录
~/codeql-home/codeql/codeql version # 输出版本号

在vscode中安装codeql插件,并配置codeql的路径为:$HOME/codeql-home/codeql/codeql(不要使用~,而是使用$HOME)

2.创建ql database

# codeql-database 为将要生成的目录,用于存放codeql分析生成的结果
~/codeql-home/codeql/codeql database create codeql-database --language=go

这个过程会持续很久(取决于仓库依赖的包数量)

3.在vscode中添加database

创建完database之后,在生成的目录上右键,选择设置为当前数据库:
在这里插入图片描述

4.查询示例

cmd+shift+p执行命令:CodeQL: Quick Query

示例:找到所有对结构体作为Receiver的方法:

import go

from Method m, Variable recv
where
  recv = m.getReceiver() and
  not recv.getType() instanceof PointerType
select m, "This method has non-pointer receiver:"+ recv

结果:
在这里插入图片描述
在这里插入图片描述

5.注意事项

可以不加 @kind problem, select返回两列仍然是有效的。
注意,并不是所有的元素都能被提供定位,比如:

import go

from Type t,string pkgName
where t.hasQualifiedName(pkgName, "MultiPackUserHandler")
select t,"it's a problem"

在这里插入图片描述
在这个例子中,能够提供定位的是t.getEntity()

import go

from Type t,string pkgName
where t.hasQualifiedName(pkgName, "MultiPackUserHandler")
select t.getEntity(),"it's a problem"

在这里插入图片描述

ql文件

基本组成

/**
 *
 * Query metadata
 *
 */

import /* ... CodeQL libraries or modules ... */

/* ... Optional, define CodeQL classes and predicates ... */

from /* ... variable declarations ... */
where /* ... logical formula ... */
select /* ... expressions ... */

返回两列

输出包含:element,message 前者用于定位具体节点,后者用于显示消息。
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值