利用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

利用UML(User Mode Linux)调试内核代码,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。