ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

Windows 环境下,CodeQL 安装教程

2022-03-31 02:01:37  阅读:317  来源: 互联网

标签:教程 github CodeQL codeql Windows 数据库 编译 cpp


其实吧,这玩意,网上教程特别多,但是都有问题,

很多细节说得不清不楚,结果按照教程根本无法完整地安装上,

所以,这里还是重新整理一下 CodeQL 的安装过程。

 

1:

下载 CodeQL ,地址:https://github.com/github/codeql-cli-binaries

cli,地址,我下载的是当前时刻的最新版:https://github.com/github/codeql-cli-binaries/releases/download/v2.8.4/codeql-win64.zip

 

2:

下载 CodeQL ,支持库,地址:https://github.com/github/codeql

直接下载就好了

 

其实,做完以上两步,就可以用了,但是。。。

这个配置,会玩死你。。。

这里先说配置,后面缺东西,再加

 

配置,先把 codeql-cli 解包,随便放在哪里,可以改名就叫 codeql-cli

再把 CodeQL 支持库解压,随便放在哪里,可以改名叫 codeql-home

比如,放在同一个目录下

 

 

 

两个目录均加入环境变量

加用户变量就好,不用加系统变量,比如这样

 

 

 

然后打开个cmd,看一下效果,

 

 

还是有效果的

 

好了,正常情况下,如果想使用IDE的话,还得弄个VSCode,这个不算插曲,如果想用,就搞,不想用就算了,

这里还是搞一个吧,有界面总比看黑框框强。

 

当前最新版 vscode

https://az764295.vo.msecnd.net/stable/c722ca6c7eed3d7987c0d5c3df5c45f6b15e77d1/VSCode-win32-x64-1.65.2.zip

下载了之后,直接解压,直接能用,

然后,去vscode里面安装 codeql 插件,这些都很傻瓜,安装方法,别的各种乱七八糟教程上也都有,

最后,配置路径

 

 

前面设置了环境变量,这里其实可以不设置的,但是,还是设置吧,重要的位置就这一个。

 

以上全都设置完,正常的套路也就结束了,

 

其他教程开始说,需要创建一个数据库了。

 

codeql 是类似要创建数据库的,然后再在数据库里面查数据的,

这些也都没啥,一般来说,别的教程都会说,这时候用这么个命令,创建数据库,就完了

codeql database create cpptest -l=cpp

对,就完了。

很多教程里面并没有说,敲这条命令的前提条件。

这里我说清楚吧。

 

首先,codeql 创建数据库,实际上是要编译一次程序的,实际上是还有个参数 -c 来控制编译的。

如果没有输入这个参数,也会编译,但是在 Windows 环境下,编译 C++ 程序,大多会失败,

且提示乱七八糟,乱码满屏飞,中文是完全都不支持吧,可能是utf-8编码的。

 

所以,如果要顺利创建一个数据库,需要传入一个 -c 参数来做编译操作。就变成了这样

1 codeql database create cpptest -l=cpp -c=“”

 

然后就是下一个问题,怎么编译,常规方式必然无法处理,

一般来说,Windows上编译软件,大多都是使用VS 系列,比如我这边, vs 从 6 到 2022 全都有。

第二个编译方法,可能少部分人会使用 mingw 安装 gcc 来编译代码,也没问题,

第三个编译的方法,极少数人可能会用 llvm + clang 来做编译,这个,我本地也有。

(其实最后我选择了方法3,因为1不行,2我又不想装,继续)。

 

OK了,那就一个一个来吧,正常来说,我们用VS来写代码,那么就用vs来编译吧,我还记得有个东西叫 devenv ,能直接编译整个项目,我好聪明,来吧,

先写个devenv 编译的命令吧,其实很简单:

1 devenv VSTest006.vcxproj /rebuild "Release" /Project VSTest006 /ProjectConfig "Release|Win32"

很容易吧,rebuild一个项目,然后build win32版, release 程序,一切都那么完美,这条命令是可以执行的(需要有vs2019 命令行环境),

然后第一条编译命令出现了,

1 codeql database create cpptest -l=cpp -c="devenv VSTest006.vcxproj /rebuild \"Release\" /Project VSTest006 /ProjectConfig \"Release|Win32\"" --overwrite 

看着没啥问题,很完美,但是执行的时候,就疯了

 

 

什么破逼玩意。

行吧,这么搞,搞不定,那就来个曲线救国,

我把编译命令写个批处理,然年后调用批处理来编译,总可以吧。

1 codeql database create cpptest -l=cpp -c="build.bat" --overwrite

我很高兴地再重新创建数据库,

乱码出现了,不要紧,但是问题怎么解决啊,实际上。。。

 

 

可能codeql 工具链里面有个东西调用了这玩意,尴尬,咋整。批处理也不能用了,

还有最后一种方法,就是走自己动手老路,cl 一个一个编译文件,其实,我不想这么干,因为,如果我用cl 这么干的话,后续链接也需要我自己来链,太坑了。

 

至此 vs 系列,放弃,

我电脑中没有安装mingw,所以直接放弃

 

但是,我之前用过llvm,我这里还有llvm,所以,可以用llvm的工具 clang 来做相关的事情,试试看。

命令就变成了这样

1 codeql database create cpptest -l=cpp -c="clang VSTest006.cpp" --overwrite

成了

 

 

推断 -c 命令还支持 makefile 或者 cmake 之类的,这里是我懒得查,所以放弃了,先趟道,再深究。

 

数据库有了,然后就是查询了

 

查询怎么办,好办,

写段查询代码,就查了,比如,我查个函数吧

 1 /**
 2  * @name Nemesis
 3  * @kind problem
 4  * @id Zoo
 5 */
 6 
 7 import cpp
 8 
 9 
10 from Function f
11 select f, f.getName()

打印函数名

 

正常查询、打印的命令是这样的

 

 

结果是这样的

 

 

效果还不错,8行第五个。

但是一般来说,第一次玩的时候,查询都是这样的结果

 

 

看说明说,需要有个 qlpack.yml ,然后开始google吧,运气好的话,10~30分钟后,问题可以解决,

运气不好,就看脸了,

 

强调一下很难么?还是我的脸就黑,我看的那些教程全部都是扯蛋的,全部都没说把它放在指定位置 ,

没人会说,这个代码,必须是放在 codeql 的库里面的,否则 第一行 import cpp 都import 不到,

 

一切都结束,命令行版就解决了,

非命令行版怎么办呢。

 

命令行版处理完了,UI版其实更简单了。OK,收工,

 

 

夜里饿了,中间炒了个饭,又炖了个汤

 

个人感觉,这玩意,其实和重构工具类似,都是通过AST树来分析各个元素,然后获取相关的各种信息,加以展示。

可能对那种解释性语言,它算式一个很有用的东西,

对编译性语言来说,它的用途,感觉有限,因为和他功能相近或类似的东西其实不少。

最近的,比如,VAX。。。代码整体重构,不但能各种查还能各种改,只是无法定位参数等信息,但是不重要,因为如果代码整洁规范的话,参数查的时候就找到了

 

标签:教程,github,CodeQL,codeql,Windows,数据库,编译,cpp
来源: https://www.cnblogs.com/suanguade/p/16080015.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有