通过qemu调试centos7内核
Posted rayylee
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过qemu调试centos7内核相关的知识,希望对你有一定的参考价值。
1.安装依赖
sed -e 's|^mirrorlist=|#mirrorlist=|g' \\
-e 's|^#baseurl=http://mirror.centos.org|baseurl=https://mirrors.tuna.tsinghua.edu.cn|g' \\
-i.bak \\
/etc/yum.repos.d/CentOS-*.repo
yum install -y vim wget lrzsz
yum install -y gcc bc gcc-c++ ncurses ncurses-devel cmake elfutils-libelf-devel openssl-devel libgcrypt-devel glibc-static
yum install -y qemu-kvm gdb net-tools texinfo
systemctl stop firewalld
systemctl mask firewalld
setenforce 0
sed ‐i '/^SELINUX/s/=.*/=disabled/' /etc/selinux/config
2.下载内核版本解压并进入解压目录
wget https://vault.centos.org/7.9.2009/os/Source/SPackages/kernel-3.10.0-1160.el7.src.rpm
3.清理内核源目录
make mrproper
4.使用make menuconfig菜单来订制内核功能
make menuconfig
(
配置ext4、virtio为 Y
修改Makefile: -O2改为-O1; 删掉-Werror
)
5.编译内核
make vmlinux -j 4
make bzImage
6. 通过qemu-kvm调试内核
/usr/libexec/qemu-kvm -kernel arch/x86/boot/bzImage -initrd initramfs.cpio.gz -s -S -append nokaslr -vnc :0
-kernel bzImage
:指定内核路径
-initrd file
:指定initramdisk路径
-s
:-gdb tcp::1234
的缩写, 开启一个gdbserver, 可以通过TCP端口1234连接
-S
: 启动后立即暂停
-append nokaslr
: 指定内核参数nokaslr
, 禁止内核地址随机化, 否则gdb打断点找不到地址
-vnc :0
: 开启vnc监听0端口
打开另一个终端
gdb vmlinux
或者
gdb vmlinux --tui
(gdb) target remote:1234
Remote debugging using :1234
0x0000000000000000 in irq_stack_union ()
(gdb) hb start_kernel // 设置硬件断点
Hardware assisted breakpoint 1 at 0xffffffff81d9ae44: file init/main.c, line 489.
(gdb) info b
Num Type Disp Enb Address What
1 hw breakpoint keep y 0xffffffff81d9ae44 in start_kernel at init/main.c:489
breakpoint already hit 1 time
(gdb) c
Continuing.
Breakpoint 1, start_kernel () at init/main.c:489
489
以上是关于通过qemu调试centos7内核的主要内容,如果未能解决你的问题,请参考以下文章
开启内核地址随机化KASLR后, qemu 调试 kernel 不能设置断点