CodeQL练习1
CodeQL官方准备了一些无关编程语言的QL语言练习,我这里整理稍许来记录学习一下。
QL是一种逻辑编程语言,所以它是由逻辑公式构成的。QL使用常见的逻辑连接词(如and、or、not)、量词(如forall和exists),以及其他重要的逻辑概念,如谓词。QL还支持递归和聚合。这使得你可以使用简单的QL语法编写复杂的递归查询,并直接使用计数、总和和平均数等聚合体。
以下是Introdution to QL 中的练习
简单的查询
下面是一个基本查询的例子。
select "hello world"
这个查询返回字符串 "hello world"。更复杂的查询通常看起来像这样。
from /* ... variable declarations ... */
where /* ... 逻辑公式 ... */
select /*...表达式... */
例如,这个查询的结果是数字42。
from int x, int y
where x=6 and y=7
select x * y
注意,int指定x和y的类型是 "integer"。这意味着x和y被限制为整数值。其他一些常见的类型有:boolean(true或false),date,float,和string。
简单的练习
- 字符串:写一个查询,返回字符串 "lgtm" 的长度。(提示:这里是可以应用于字符串的函数列表。)
from string s
where s = "lgtm"
select s.length()
- 数字:写一个查询,返回 3^5(3 提高到 5 的幂)和 245.6 的最小值的正弦。
from float x, float y
where x = 3.pow(5) and y = 245.6
select x.minimum(y).sin()
- 布尔运算:写一个查询,返回布尔值 false 的相反值。
from boolean b
where b = false
select b.booleanNot()
- 日期:写一个查询,计算 2017 年 6 月 10 日至 9 月 28 日之间的天数。
from date start, date end
where start = "10/06/2017".toDate() and end = "28/09/2017".toDate()
select start.daysTo(end)
多结果的查询练习
以上练习都显示了正好有一个结果的查询,但许多查询都有多个结果。例如,下面的查询计算了1到10之间的所有毕达哥拉斯式三段论。
from int x,int y,int z
where x in [1..10] and y in [1..10] and z in [1..10]
and x*x + y*y = z*z
select x,y,z
如果了解谓词的话,还可以按照谓词的形式来编写。SmallInt暂时可以理解为面向对象语言中的类,square可以理解为类中的方法。SmallInt类的实例用于表示整数1到10,square()谓词表示某个整数的平方。使用这样的写法可以减少重复代码的使用
class SmallInt extends int{
SmallInt() {this in [1..10]}
int square() {result = this*this}
}
from SmallInt x,SmallInt y,SmallInt z
where x.square() + y.square() = z.square()
select x,y,z
CodeQL查询实例
前面的例子使用了QL内置的原始类型。虽然我们选择了一个项目进行查询,但我们并没有使用该项目数据库中的信息。下面的例子查询确实使用了这些数据库,让你了解如何使用CodeQL来分析项目。使用java来举例
import java
from Parameter p
where not exists(p.getAnAccess())
select p
from子句定义了一个代表Java参数的变量p。where子句通过将参数p限制在那些未被访问的参数中来找到未使用的参数。最后,select子句列出了这些参数。 其实不太懂什么意思....
CodeQL练习1的更多相关文章
- CodeQL CLI入门
一.CodeQL CLI 安装和配置 1.下载CodeQL CLI 压缩包 https://github.com/github/codeql-cli-binaries/releases 2.创建Cod ...
- codeql初探
CodeQL初探 环境搭建 基于Windows 基于Mac 下载codeql https://github.com/github/codeql-cli-binaries/releases/latest ...
- CodeQL使用流程
前言 好久没用CodeQL了,看了自己之前写的文章发现竟然没有做过相关记录 然后就不知道怎么用了hhh 使用流程 0x1 生成数据库 我们拿到一套源码,首先需要使用CodeQL生成数据库 执行命令: ...
- CodeQL(1)
前言 开始学习使用CodeQL,做一些笔记,可供参考的资料还是比较少的,一个是官方文档,但是Google翻译过来,总觉得怪怪的,另一个就是别人的一个资源整合,其中可供参考的也不是很多,大多也是官方文档 ...
- Python 爬取 热词并进行分类数据分析-[App制作]
日期:2020.02.14 博客期:154 星期五 [本博客的代码如若要使用,请在下方评论区留言,之后再用(就是跟我说一声)] 所有相关跳转: a.[简单准备] b.[云图制作+数据导入] c.[拓扑 ...
- 微软 Build 大会发布大量开发工具与服务!编码、协作、发布,如丝般顺滑
Microsoft Build 2020开发者大会已经圆满落幕,在连续两天48小时的不间断直播中,来自全世界的开发者共赴盛宴,场面相当壮观.在这一年一度的大聚会里,微软也是诚意满满,带来了一连串的产品 ...
- 通读《构建之法》与CI/CD工具尝试
项目 内容 这个作业属于哪个课程 2021春季软件工程(罗杰 任健) 这个作业的要求在哪里 作业要求 我在这个课程的目标是 积累软件开发经验,提高工程能力 这个作业在哪个具体方面帮助我实现目标 通读课 ...
- python常见漏洞总结
总结一下python里面常见安全问题,文章大部分内容来自MisakiKata师傅的python_code_audit项目,对原文进行了一些修改,后续会使用编写了规则对代码里面是否用到这些危险函数进行相 ...
- [Java反序列化]jdk原生链分析
jdk原生链分析 原文链接 作为jdk中目前发现的原生链,还是有必要要分析这个用法的.全文仅限尽可能还原挖掘思路 JDK7u21 在很多链中,TemplatesImpl一直发挥着不可或缺的作用,它是位 ...
- java反序列化漏洞专项
背景条件:java的框架,java的应用程序,使用序列化,反序列化操作非常多.在漏洞挖掘中,代码审计中,安全研究中,反序列化漏洞是个重点项,不可忽视.尤其是java应用程序的rce,10个里面有7个是 ...
随机推荐
- js day04 实参与形参个数不一致
// function fn(x, y) { // // x = 1 // // y = undefined // // 1 + ...
- 【大数据面试】Flink 03-窗口、时间语义和水印、ProcessFunction底层API
三.窗口 1.窗口的介绍 (1)含义 将无限的流式数据切割为有限块处理,以便于聚合等操作 (2)图解 2.窗口的分类 (1)按性质分 Flink 支持三种划分窗口的方式,time.count和会话窗口 ...
- Springboot配置多Redis源
Springboot配置多Redis源 一.背景 因项目部署了新集群,某些缓存数据需要在旧的redis上取,就必须配置多个数据源动态获取相对应的源以兼容业务. 二.配置依赖 <dependenc ...
- java计算器༼༎ຶᴗ༎ຶ༽༼༎ຶᴗ༎ຶ༽༼༎ຶᴗ༎ຶ༽༼༎ຶᴗ༎ຶ༽,又是掉发的一天
题目: 给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值. 注意:不允许使用任何将字符串作为数学表达式计算的内置函数,比如 eval() . 示例 1: 输入:s = " ...
- 官网下载CentOS系统镜像过程
想学习CentOS系统,但是不知道镜像去哪里搞,随便去个第三方发现要么要注册,要么各种广告病毒,或者好不容易找到官网,不仅全英文,有些专业术语也不懂,本文说明官网下载自己想要的CentOS镜像整个流程 ...
- 使用插件式开发称重仪表驱动,RS232串口对接各类地磅秤数据实现ERP管理
在ERP系统中,采集一线的生产数据是重要工作之一,而称重计量是企业的核心资产数据,人工计重费时费力,还容易出错,重量数据是否正确,直接影响企业的采购或销售额.基于此,由系统对接电子秤实现自动抓取数据是 ...
- 一文了解华为FusionInsight MRS HBase的集群隔离方案RSGroup
摘要: RSGroup是集群隔离方案. 本文分享自华为云社区<华为FusionInsight MRS HBase的集群隔离--RSGroup>,作者: MissAverage. 一.HBa ...
- 蚂蚁感冒【第五届蓝桥杯省赛C++A/B组】
蚂蚁感冒 长 \(100\) 厘米的细长直杆子上有 \(n\) 只蚂蚁. 它们的头有的朝左,有的朝右. 每只蚂蚁都只能沿着杆子向前爬,速度是 1 厘米/秒. 当两只蚂蚁碰面时,它们会同时掉头往相反的方 ...
- 揭开华为云CodeArts TestPlan启发式测试设计神秘面纱!
摘要:质量是产品的生死线. 本文分享自华为云社区<揭开华为云CodeArts TestPlan启发式测试设计神秘面纱!>,作者:华为云PaaS服务小智 . 2019年12月20日,是美国波 ...
- 超简单的图文并茂Linux上使用yum安装Mysql(Aliyun Linux release 2.1903 LTS)
首先登录进入你的Linux服务器 查看是否已安装mysql rpm -qa|grep mysql 查看自己的服务器版本 cat /etc/redhat-release 打开MySQL Yum存储库下载 ...