CodeQL 词汇表¶
CodeQL 中的技术术语和概念概述。
.bqrs
文件¶
二进制查询结果集 (BQRS) 文件。BQRS 是查询原始结果的二进制表示形式,扩展名为 .bqrs
。BQRS 文件可以解释为有意义的结果,并与您的源代码相关联。例如,警报查询结果被解释为在源代码中显示警报发生的字符串位置,如查询中所指定。同样,路径查询结果被解释为信息可以流动的两个位置(源和接收器)对。这些结果可以导出为多种不同的格式,包括 SARIF。
CodeQL 数据库¶
数据库(或 CodeQL 数据库)是一个目录,其中包含
- 可查询数据,从代码中提取。
- 源引用,用于直接在代码中显示查询结果。
- 查询结果。
- 在数据库创建、查询执行和其他操作期间生成的日志文件。
CodeQL 包¶
CodeQL 包用于创建、共享、依赖和运行 CodeQL 查询、库和模型。您可以发布自己的 CodeQL 包,并下载其他人创建的包。CodeQL 查询包可能包含查询、库文件、查询套件和元数据。CodeQL 库包包含一个或多个 CodeQL 库。CodeQL 模型包包含一个或多个数据扩展文件,这些文件通过对代码库的依赖项(库和框架)建模来扩展核心库。
数据扩展¶
当您想要对自定义依赖项的源和接收器进行建模时,您可以创建一个 CodeQL 库(.qll
文件)并编写使用它的查询,但这通常比创建数据扩展文件要简单得多。如果您在数据扩展中对源和接收器进行建模,则可以使用这些信息来扩展标准查询,以涵盖您的自定义依赖项。您无需编写任何新的查询。
DIL¶
DIL 代表 Datalog 中间语言。它是查询编译期间生成的 QL 和关系代数 (RA) 之间的中间表示形式。DIL 对高级用户很有用,因为它可以帮助调试查询性能。DIL 格式可能会在 CLI 版本之间发生变化,恕不另行通知。
当您为 codeql query compile
指定 --dump-dil
选项时,CodeQL 会为它编译的查询将 DIL 打印到标准输出。当您在 VS Code 中运行查询时,您也可以查看 DIL 格式的结果。有关更多信息,请参阅 GitHub 文档中的 运行 CodeQL 查询。
提取器¶
提取器是一种工具,它可以从每个输入文件中生成关系数据和源引用,从而构建 CodeQL 数据库。
QL 数据库架构¶
QL 数据库架构是一个文件,它描述了构成原始 QL 数据集的列类型和扩展关系。它是一个文本文件,扩展名为 .dbscheme
。
提取器和某种语言的 CodeQL 核心包都声明了它们使用的数据库架构。这定义了它们创建或期望的数据库布局。当您创建 CodeQL 数据库时,提取器会将其架构复制到数据库中。CLI 使用它来检查 CodeQL 数据库是否与特定的 CodeQL 库兼容。如果它们不兼容,您可以使用 database upgrade
来升级 CodeQL 数据库的架构。
目前还没有关于架构语法公开的规范。
.qlo
文件¶
.qlo
文件是在查询编译期间可选生成的。如果您为 codeql query compile
指定 --dump-qlo
选项,CodeQL 会为它编译的查询写入 .qlo
文件。它们可以用作高级用户调试和性能调优的辅助工具。
.qlo
是一种二进制格式,它以关系代数 (RA) 或中间 DIL 格式表示已编译和优化的查询。.qlo
文件可以使用 codeql query decompile
展开为可读的文本。
.qlo
格式的具体细节可能会在 CLI 版本之间发生变化,恕不另行通知。
源引用¶
源引用是一种机制,它允许在给定提取期间该文件所驻留的绝对文件名的情况下检索源文件的内容。具体示例包括
- 源存档目录,其中请求的绝对文件名映射到 UTF8 编码文件。
- 源存档,通常采用 ZIP 格式,其中包含所有源文件的 UTF8 编码内容。
- 源存档仓库,通常采用
git
格式,通常是裸仓库,其中包含所有源文件的 UTF8 编码内容。
源引用通常包含在 CodeQL 数据库中。
TRAP 文件¶
TRAP 文件是由 CodeQL 提取器生成的 UTF-8 编码文件,扩展名为 .trap
。为了节省空间,它们通常被存档。它们包含的信息在相对于 QL 数据库架构进行解释时,用于创建 QL 数据集。