2026西湖龙井茶官网DTC发售:茶农直供,政府溯源防伪到农户家
当您想要研究 Linux 内核时,例如观察漏洞利用程序的行为(如针对内核 4.7 的 Dirty COW 漏洞),您需要构建一个舒适的工作环境。
我使用:
- Docker:用于在其原始版本环境中编译源代码(使用与源代码时代相对应的 GCC/LD 版本)。
- QEMU:用于在虚拟机中运行可执行文件。
- VS Code:作为调试器。
通过本文,我将向您展示如何配置我的环境以实现高效的设置。
1) 编译源代码
第一步是获取内核源代码。
对于较新的版本(5.10 以上),最简单的方法是从 kernel.org 下载 tar 文件。对于较旧的版本,最好的解决方案是通过 git 获取。
例如,对于 4.7 版本,我们首先检索标签:
git ls-remote --tags git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git | grep "v4.7"
然后我们克隆它以获取该版本,而无需下载整个历史记录:
git clone --depth 1 --branch v4.7 git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 4.7
几分钟后,您将拥有一个包含 4.7 内核源代码工作版本的 4.7/ 目录。
然而,这些源代码无法直接编译。使用现代编译器(GCC 13+)编译 4.7 内核(于 2016 年发布)会因 C 语言标准或安全属性处理的变化而产生编译错误。这就是为什么您需要加载与这些源代码兼容的 GCC 和 LD 版本(见下表),而实现这一点的最简单方法是通过 Docker。
| 内核版本 | Ubuntu 版本 | 代号 | 发布日期 | 默认 GCC |
|---|---|---|---|---|
| v2.6.x | 6.06 | Dapper Drake | 2006 年 6 月 | GCC 4.0 |
| v3.2 | 12.04 | Precise Pangolin | 2012 年 4 月 | GCC 4.6 |
| v3.13 | 14.04 | Trusty Tahr | 2014 年 4 月 | GCC 4.8 |
| v4.4 | 16.04 | Xenial Xerus | 2016 年 4 月 | GCC 5.4 |
| v4.15 | 18.04 | Bionic Beaver | 2018 年 4 月 | GCC 7.3 |
| v5.4 | 20.04 | Focal Fossa | 2020 年 4 月 | GCC 9.3 |
| v5.15 | 22.04 | Jammy Jellyfish | 2022 年 4 月 | GCC 11.2 |
| v6.8 | 24.04 | Noble Numbat | 2024 年 4 月 | GCC 13.2 |
我们需要检索与我们感兴趣的内核版本相对应的 Docker 容器。对于 4.7 版本,它是 Ubuntu 16.04。
要搜索可用的容器,有两种解决方案:
a) 运行命令:
skopeo list-tags docker://docker.io/library/ubuntu
您应该会看到类似以下内容
{
"Repository": "docker.io/library/ubuntu",
"Tags": [
"10.04",
"12.04",
"12.04.5",
"12.10",
"13.04",
"13.10",
"14.04",
"14.04.1",
...
...然后运行命令:
sudo docker pull ubuntu:16.04
b) 前往 Docker Hub