由 Austin Peavy 开发 - https://github.com/aus10pv
由 NCC Group Plc 以开源形式发布 - https://www.nccgroup.com/
根据 Apache 2.0 许可证发布(更多信息请参阅 LICENSE)

Cartographer 是适用于 Ghidra 的代码覆盖率映射插件,使研究人员无需源代码即可观察程序中哪些部分已被执行。
可以从 Releases 页面下载 Cartographer 的最新稳定版本。
File -> Install Extensions...插件加载后,CodeBrowser 窗口中将出现用于处理代码覆盖率数据的附加控件。
可以通过 Tools 菜单加载代码覆盖率文件:Tools -> Code Coverage -> Load Code Coverage File(s)...
加载代码覆盖率文件后,所有覆盖率数据会立即在 Listing 视图和 Decompiler 视图中高亮显示。

每个函数的覆盖率数据详细信息可在 Code Coverage 窗口中找到。
可以通过导航到 Window -> Code Coverage 打开 Code Coverage 窗口,或在 Windows 上按 Ctrl-Shift-C(在 Mac 上按 Cmd-Shift-C)。
该窗口显示程序中每个函数的各种详细信息:
单击任意函数将在 Listing 视图和 Decompiler 视图中跳转到相应函数。

Filter 输入框可用于按名称搜索函数。
覆盖率表中显示的任何数据都可以用作列筛选条件。

Code Coverage 窗口右下角的下拉菜单可用于在已加载的代码覆盖率文件之间快速轻松地切换。

Code Coverage 窗口底部的文本框可用于对已加载的代码覆盖率文件执行逻辑运算。
这对于检查程序不同运行之间的差异和相似之处极其有用。

以下是可在表达式解析器中使用的逻辑运算符。
&:仅获取由两个覆盖率共同执行的代码|:获取由任一覆盖率执行的代码^:仅获取两个覆盖率之间执行不同的代码-:仅获取左侧覆盖率中独有的已执行代码覆盖率通过下拉菜单中的字母 ID 进行引用,例如 A、B、XY 等。
每个逻辑运算都用括号分组,表达式可以是任意长度或复杂度。
显示在两个覆盖率 A 和 B 中都被执行的代码:
A & B
显示覆盖率 A 和 B 之间执行不同的代码:
A ^ B
显示仅在 B 中执行的代码:
B - A
合并 A 和 B 中的全部覆盖率数据,然后找出与 C 之间的任何差异:
(A | B) ^ C
可以使用 Gradle 从源代码构建 Cartographer。
克隆 Cartographer 的 GitHub 仓库。
$ git clone https://github.com/nccgroup/Cartographer.git
进入仓库并使用 gradle 构建。
$ cd Cartographer
$ gradle -PGHIDRA_INSTALL_DIR=<ghidra_install_dir>
<ghidra_install_dir> 替换为你本地 Ghidra 的安装路径。构建完成后,插件 ZIP 文件将位于 dist/ 文件夹中。
如果你在 Cartographer 中发现了 Bug,请通过 GitHub 提交 issue。
最初灵感源自 Lighthouse - https://github.com/gaasedelen/lighthouse