使用VMware和GDB进行Linux内核调试

Intro

之前搭过以qemu+gdb搭内核调试环境,在这次学习Ubuntu 16.04 ebpf arbitrary read/write的分析的时候,换了一个以 VMware 和 GDB的环境进行调试。

Environment

Host: Mac OS X , VMware Fusion

Guest: Ubuntu Linux 14.04 x64

Step 1: Configure your host

第一步当然是要安装VMware 和安装相应内核的linux系统。当我们安装完之后,在虚拟机的目录下找到xxx.vmx文件,添加一行内容。
debugStub.listen.guest64 = "1" 如果是32位环境,将64进行替换。

Step 2: Configure your guest

我们首先得编译好相关的内核,关于内核编译的内容就不在这复述,我们需要编译完成的vmlinux文件,这个文件将作为符号信息最终将祭祀给GDB

Step 3: Build and Connect GDB

由于mac os环境下的 brew install 的GDB不支持linux相关,所以我们得自己编译一个GDB,

1
2
3
4
5
wget http://ftp.gnu.org/gnu/gdb/gdb-8.1.tar.gz
tar xf gdb-8.1.tar.gz
cd gdb-8.1
./configure --build=x86_64-apple-darwin14.0.0 --target=x86_64-vfs-linux --with-python && make
make install

通过configure的设置,我们可以编译得到咱们想要的GDB模式。

mac的话,我们可以在 /usr/local/bin找到我们编译安装后的GDB

1
2
3
4
5
6
7
8
9
10
# swing @ swingdeMacBook-Pro in /usr/local/bin [17:18:19]
$ find ./ | grep gdb
.//gdb
.//gdbus-codegen
.//.gdb_history
.//x86_64-vfs-linux-gdb
.//gdbm_dump
.//gdbus
.//gdbmtool
.//gdbm_load

Start Debugging

之后,我们只需要运行我们编译后的GDB版本,然后file vmlinux,加载符号信息,然后通过
target remote :8864 ps :32位替换64即可。
这样我们就可以开始咱们的调试之旅了。