构建与调试 Linux 内核

Catálogo
  1. 1. Linux Kenrel
  2. 2. Install Build
  3. 3. CP Old Config
  4. 4. Build
  5. 5. disable kaslr
  6. 6. gdb stub
  7. 7. debug
    1. 7.1. vscode

Linux Kenrel

1
2
wget http://mirrors.ustc.edu.cn/kernel.org/linux/kernel/v4.x/linux-4.19.171.tar.gz
tar -xvf linux-4.19.171.tar.gz

Install Build

1
apt-get install -y libncurses5-dev libssl-dev bison flex libelf-dev gcc make openssl libc6-dev bc

CP Old Config

1
2
3
4
cp /boot/config-4.19.0-14-amd64 .config
make oldconfig
# for debian
sed -ri '/CONFIG_SYSTEM_TRUSTED_KEYS/s/=.+/=""/g' .config

Build

1
2
3
4
5
make -j8
make bzImage
make modules
make modules_install
make install

disable kaslr

1
2
3
vim /etc/default/grub
# append nokaslr
update-grub

gdb stub

1
2
3
4
5
vim xxx.vmx // 修改虚拟机的 vmx
debugStub.listen.guest64.remote = "TRUE"
debugStub.listen.guest64 = "TRUE"
monitor.debugOnStartGuest64 = "TRUE"
debugStub.port.guest64 = "8864"

debug

vscode

  1. install global
1
sudo apt install global
  1. vs 安装 global 插件

    1
    rebuild gtage database
  2. debug config

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
{
"version": "0.2.0",
"configurations": [
{
"name": "kernel-debug",
"type": "cppdbg",
"request": "launch",
"miDebuggerServerAddress": "127.0.0.1:8864",
"program": "${workspaceFolder}/vmlinux",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"logging": {
"engineLogging": false
},
"MIMode": "gdb",
}
]
}
```



### other way
参考 [Linux Debug in Qemu](https://wenfh2020.com/2021/06/23/vscode-gdb-debug-linux-kernel/)

```bash
qemu-system-x86_64 -kernel ../../arch/x86/boot/bzImage -initrd ../rootfs.img -append nokaslr -S -s