利用UML(User Mode Linux)调试内核代码
利用UML(User Mode Linux)调试内核代码
by ahuner
利用UML(User Mode Linux)调试内核代码,可用gdb单步跟踪每行代码,在用户态运行linux内核,即将内核当作一个应用程序在跑。
1.下载内核
https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.4.15.tar.gz
该流程工作目录都为:/project
2.编译内核
make mrproper
make mrproper ARCH=um
make menuconfig ARCH=um
File systems —>
<*> The Extended 4 (ext4) filesystem
Kernel hacking —>
[*] Compile the kernel with debug info
[*] Compile the kernel with frame pointers
make linux ARCH=um
make modules ARCH=um
make modules_install ARCH=um
3.下载根文件系统
wget http://fs.devloop.org.uk/filesystems/CentOS-6.x/CentOS6.x-AMD64-root_fs.bz2
bunzip2 CentOS6.x-AMD64-root_fs
mount -o loop /project/CentOS6.x-AMD64-root_fs /project/mnt_AMD64_fs
4.由于网上的文件系统可能存在问题,可自制文件系统:
dd if=/dev/zero of=/project/root_fs bs=1024K count=1000
mkfs.ext4 root_fs
mount -o loop /project/root_fs /project/mnt_root_fs
5.拷贝根文件系统目录到自制文件系统
cp -R /project/mnt_AMD64_fs/* /project/mnt_root_fs/
6.拷贝lib文件到自制文件系统
cp -r /lib/modules/3.4.15 /project/mnt_root_fs/lib/modules/
7.运行
./linux ubd0=/project/mnt_root_fs rootfstype=ext4
退出UML,在linux进程中输入:halt或init 0
如果出现以下提示:
modprobe: FATAL: Module index: unexpected error: EOF
Try re-running depmod
输入命令可解决:depmod
8.另起终端,gdb调试
gdb attach pid
directory /project/linux-3.4.15/fs/ext4
在linux进程中创建文件,输入:dd if=/dev/zero of=1 bs=1024 count=4
9.开启block_dump
可以用block_dump监控系统分配block的数量
echo 1 > /proc/sys/vm/block_dump
用dmesg命令查看日志
10.退出调试
killall -9 linux
11.加载宿主系统文件系统方式
./linux init=/bin/sh rw rootfstype=hostfs
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。