下载文件系统
https://github.com/PKFXXXX/kbin
这里也可以换成busybox自己编译,见下文,但是我懒,就找同事要了一个。
直接下载解压即可。
首先apt安装qemu
直接sudo apt install qemu
编写 boot.sh
bzImage
是内核镜像 由vmlinux压缩而来 initramfs.img
是磁盘镜像。
1 | qemu-system-x86_64 \ |
-s
选项是gdb调试用的 端口默认是1234.
然后./boot.sh
则进入qemu虚拟机。
添加文件
如果需要添加什么文件,就解压然后放入文件之后重新打包
解压磁盘镜像
1
2
3
4mkdir core
cp initramfs.img core/
cd core
cpio -idv < ./initramfs.img重打包
1
2cd core
find . | cpio -o --format=newc > ../initramfs.img
gdb attach调试
1 | sakura@ubuntu:~/kbin/kernel_env$ gdb -q |
这里set arch i386:x86-64
是为了解决一些奇妙的bug,如果不加可以调试就不用加了。
查看函数地址
如果要查看函数的地址,可以通过cat /proc/kallsyms
搜索,但是需要root权限
在本地获得root权限可以直接去改磁盘镜像根目录下的init文件。这个init文件会在kernel初始化后执行。sakura@ubuntu:~/kbin/kernel_env/core$ cat init
1 |
|
这里的重点是setuidgid 0
则创建一个root shell。
然后断下来就是这样。
编译busybox[可选]
1 | wget https://busybox.net/downloads/busybox-1.30.0.tar.bz2 |
编译完成后跟目录多了一个_install的目录,就是我们编译的结果了。
1 | cd _install |
其中init中添加如下内容
1 |
|
然后打包find . | cpio -o --format=newc > ../initramfs.img
编译内核,替换原本的bzImage
1 | sudo apt-get install git fakeroot build-essential ncurses-dev xz-utils libssl-dev bc flex libelf-dev bison |
如图可以通过dir命令设置好内核源码目录,就可以带源码调试。
总结
总结一下,下载最前面我发的环境,然后直接./boot.sh
就可以启动了,然后另开一个终端gdb attach上去就能调试了。
以后要调试别的版本的内核,也就只要自己编译一个对应版本的,替换掉原先的bzImage即可。
需要执行自己写的poc,就解压文件系统,然后放进去,然后重打包就好了,嫌麻烦的话,自己搭建一个server存文件,然后wget也可以,不过qemu里面的network环境相当神奇。