摘要:
创建路径查询 官方文档:Creating path queries — CodeQL (github.com) 概览 安全研究人员对程序中信息流动的方式特别感兴趣。许多漏洞是由看似良性的数据流向意外位置并被恶意使用而引起的。使用 CodeQL 编写的路径查询对于分析数据流特别有用,因为它们可用于跟踪 阅读全文
摘要:
CodeQL CLI — CodeQL (github.com) 创建CodeQL数据库 https://codeql.github.com/docs/codeql-cli/creating-codeql-databases/ codeql database create <database> -- 阅读全文
摘要:
注解(Annotations) 注释是一个字符串,可以直接放在 QL 实体或名称的声明之前。 例如,要将模块 m 声明为私有,可以使用: private module M { ... } 注意,有些注释作用于实体本身,而其他注释作用于特定的实体 实体: 按照一个 实体: abstract, cach 阅读全文
摘要:
公式Formulas 官方文档 https://codeql.github.com/docs/ql-language-reference/formulas/ 比较 <expression> <operator> <expression> 顺序运算符 \>, >=, <, <= 相等运算符 =, != 阅读全文
摘要:
变量(Variables) QL 中的变量的使用方式与代数或逻辑中的变量相似。它们表示一组值,这些值通常受到公式的限制。 这与其他一些编程语言中的变量不同,在这些语言中,变量表示可能包含数据的内存位置。这些数据也会随着时间的推移而改变。 例如,在 QL 中,n = n + 1是一个等式,只有当 n 阅读全文
摘要:
表达式(Expressions) Expressions — CodeQL (github.com) 表达式计算为一组值,并具有类型。 例如,表达式1 + 2计算为整数3,表达式“ QL”计算为字符串“ QL”。1 + 2类型为 int,“ QL”类型为 string。 变量引用(Variable 阅读全文
摘要:
别名(Aliases) 别名是现有 QL 实体的替代名称。 定义了别名之后,可以使用该新名称引用当前模块命名空间中的实体。 定义别名 您可以在任何模块的主体中定义别名。为此,您应该指定: 关键字module、class或predicate分别为module、type或非成员谓词non-member 阅读全文
摘要:
模块(Modules) 模块通过将相关类型、谓词和其他模块组合在一起,提供了一种组织 QL 代码的方法。 定义模块 定义模块的方法有很多种ーー这里有一个最简单的例子,声明一个名为 Example 的显式模块,其中包含一个类 OneTwoThree: module Example { class On 阅读全文
摘要:
查询(Queries) 官方文档 https://codeql.github.com/docs/ql-language-reference/queries/ 查询是 QL 程序的输出,它们计算成组的结果。 有两种查询方式: 使用select字句进行查询。如果存在select模块,在该模块中定义。 使 阅读全文
摘要:
类型(Types) QL 是一种静态类型的语言,因此每个变量都必须有一个声明的类型。 类型是一组值。例如,int 类型是一组整数。注意,一个值可以属于这些集合中的多个,这意味着它可以有多个类型。 QL 中的类型有基本类型、类、字符类型、类域类型、代数数据类型、类型联合和数据库类型。primitive 阅读全文
摘要:
关键词 关于 QL 语言:QL 是 CodeQL 的强大查询语言,用于分析代码。 谓词:谓词用于描述构成 QL 程序的逻辑关系。 查询:查询是 QL 程序的输出。他们评估结果集。 类型:QL 是一种静态类型语言,因此每个变量都必须有一个声明的类型。 模块:模块提供了一种通过将相关类型、谓词和其他模块 阅读全文