qemu+gdb调试内核
我们在内核调试的时候,会有很多方法,比如printk, ftrace, kprobe, ebpf和gdb等。比起其他的方法,gdb可以单步运行代码,实时获取变量信息等优势。但劣势也比较明显,比如效率较低,比较适合代码较少,操作简便,场景单一的情况。
编译内核
本实验采用x86的内核,需要增加打开CONFIG_BLK_DEV_RAM选项,并将CONFIG_BLK_DEV_RAM_SIZE设置为65535,以便于使用qemu启动,方法如下:
make menuconfig
进入Device drivers --> Block devices
选中RAM block device support
构建根文件系统
1)下载busybox
- wget http://www.busybox.net/downloads/busybox-1.35.0.tar.bz2 --no-check-certificate
- tar xvjf busybox-1.35.0.tar.bz2
2)编译busybox
- make menuconfig
在Settings中选中“Build static binary”
make
3)制作rootfs
- dd if=/dev/zero of=rootfs.img bs=1M count=20
- mkfs.ext4 rootfs.img
- mkdir fs
- sudo mount -t ext4 -o loop rootfs.img ./fs
- sudo make install CONFIG_PREFIX=./fs
- cd fs/
- sudo mkdir proc dev etc home mnt
- sudo cp -r ../examples/bootfloppy/etc/* etc/
- sudo mkdir /sys
- 修改etc/fstab为如下内容:
proc /proc proc defaults 0 0
tmpfs /tmp tmpfs defaults 0 0
sysfs /sys sysfs defaults 0 0
tmpfs /dev tmpfs defaults 0 0
debugfs /sys/kernel/debug debugfs defaults 0 0
到此,我们得到了我们新制作的根文件系统rootfs.img
安装gdb工具
我使用的是优麒麟系统,所以键入命令“sudo apt-get install gdb gdb-multiarch”
使用qemu启动内核,我的qemu启动脚本为
#!/bin/bash
qemu-system-x86_64 \-cpu kvm64 \-smp 2 \-m 1024M \-kernel ./linux-objtrace-jeff-v15/arch/x86_64/boot/bzImage \-qmp unix:/tmp/mem/qemu/qmp,server,nowait \-gdb unix:/tmp/mem/qemu/gdb,server,nowait \-nographic \-append "root=/dev/ram0 rw rootfstype=ext4 console=ttyS0 init=./linuxrc nokaslr" \-initrd ./rootfs_x86_64.img
使用gdb调试内核
1)启动gdb
sudo gdb-multiarch --tui vmlinux (其中vmlinux为编译好的内核elf文件)
2) 连接内核
target remote /tmp/mem/qemu/gdb
3) 设置断点
b __kprobe_trace_func
本节我们使用一个比较典型的gdb场景,调试kprobe代码,因为kprobe本身属于ftrace的一部分,所以不能使用ftrace来调试kprobe,gdb比较合适。
4) continue (或直接运行c)
让内核继续运行起来。
5) 在内核中输入如下命令,进入断点
cd /sys/kernel/debug/tracing/
echo 1 > events/kprobes/p_vfs_open_0/enable
cat trace
6) 常用调试命令
单步命令:n
进入调用函数内部:s
查看当前函数参数:i args
查看局部变量:i locals
查看单独变量: p variable
查看结构中每一项的值: p *pointer
查看结构定义:ptype struct (ptype /o code还可以查看结构中每一项地址的offset)
查看指定区域的内存内容x/32 addr(读取addr后32个64bit数据)
本例中函数store_trace_args将字符串”trace”放到了entry中,我们查看了entry后面的内存内容,找到了字符串”trace”的ascii,即“74,72,61,63,65”。
查看调用栈:bt
反汇编函数:disas function_name
查看反汇编指令:x/3i $pc
单步调试汇编:ni
查看寄存器:info register rdi (i register rdi)
基本就是这些,虽然不像eclipse, visual studio那样可以使用鼠标操作,但熟练之后效率也不会低的。
qemu+gdb调试内核相关推荐
- qemu+gdb调试linux内核
文章目录 编译内核 下载qemu 构建initramfs根文件系统 1.编译Busybox 2.生成initrd 3.测试根文件系统 gdb调试内核 参考文献 编译内核 # make menuconf ...
- QEMU+GDB调试方法
两年前调试usb/ip开源项目时,就曾用虚拟机远程调试过Windows和Linux系统内核,当时在VMware Workstation上创建两个虚拟机进行调试,也没有记录下如何配置调试,只是大体的还记 ...
- Qemu gdb 调试 Liteos realview-pbx-a9 工程
目录 调试环境准备 gdb 调试方法 调试环境准备 实验操作系统:ubuntu 18.04.5.准备如下环境: 下载 huawei liteos, 并按照官方文档.编译 realview-pbx-a9 ...
- 利用QEMU+GDB搭建Linux内核调试环境
前言 对用户态进程,利用gdb调试代码是很方便的手段.而对于内核态的问题,可以利用crash等工具基于coredump文件进行调试. 其实我们也可以利用一些手段对Linux内核代码进行gdb调试,qe ...
- gdb 调试kvm虚拟机_GDB+QEMU调试内核模块(实践篇)
调试内核模块的方法有很多.最常用的,可能也是上手难度最低的就是使用prinfk打印出相关的调试信息,但是总给人的感觉不够geeek,所以这里描述一种能够使用gdb+qemu来调试内核的方法. 启动虚拟 ...
- 学内核之二:基于QEMU搭建Linux内核运行调试环境
目录 一 接续上文 二 编译根文件系统 三 构建完善根文件系统 四 内核中指定根文件系统 五 带根文件系统启动内核 一 接续上文 在上一篇文章中,我们展示了通过QEMU仿真软件来运行Linux内核的过 ...
- qemu debug linux内核,在QEMU环境中使用GDB调试Linux内核
简介 对用户态进程,利用gdb调试代码是很方便的手段.而对于内核态的问题,可以利用crash等工具基于coredump文件进行调试.其实我们也可以利用一些手段对Linux内核代码进行gdb调试,qem ...
- qemu debug linux内核,qemu调试linux内核
2012.03.19 网上时间过早的讲编译内核的文章完全不用看,比如什么讲kgdb的,现在这个东西早就被集成到内核里了.还有调试内核的一些允许kernel debugging的选项,在新版本中也早已是 ...
- 通过gdb调试分析Linux内核的启动过程
作者:吴乐 山东师范大学 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.实验流程 1.打开环境 执 ...
最新文章
- 附庸风雅(2006-10-20 13:39:32)(新浪)
- 如何用vue-router为每个路由配置各自的title
- Perl、PHP、Python、Java和Ruby的比较(来自知乎)
- 荆门 php,荆门php培训
- [FFT/IFFT]快速傅里叶(逆)变化 + 递归和递推模板
- Android Camera调用流程
- 统计每天的数据 无数据也要显示日期程序解决方法
- 全球AI挑战-场景分类的比赛源码(多模型融合)
- php获取客户端的真实IP的方法
- Struts 1与Struts 2区别
- 浏览器访问127.0.0.1已拒绝连接
- 【Linux】——用户账号和组账号
- 【_declspec(dllimport)】_declspec(dllimport)
- win7-32位系统SqlServer2014版本下载与安装
- Chrome的一些快捷键
- 谷歌浏览器,查找CSS选择器
- Windows 10的TPM模块到底是不是美国全球监控体系的奠基石?
- 不规则现金流 java设计_第三节不规则现金流的计算
- 《open-falcon入门教程二》open-falcon安装
- 基于pytorch的softmax分类器
热门文章
- 6道常见Linux运维面试题讲解!
- 问题来了、、挖掘机技术哪家强?问题又来了、、
- ShareX(图片文件分享程序)V11.1.0中文版
- 天声同化oracle,PLOS COMPUT BIOL:Glucoracle——糖尿病患者控制血糖的好帮手!
- cell:胸腺类器官技术使ips细胞变为T细胞,使无限T细胞供应成为可能
- 谷牛期权在资产风险管理中的作用
- 员工管理书籍推荐,做好员工管理看这些书就够了
- 解决笔记本开机D、E(硬盘)消失不见问题
- 辽宁本溪:群猴趁动物园搬迁出逃闯进市长办公室
- ProXmoX下使用QM命令部署黑群晖DSM6.1.7