GDK7+NanoCode调试学习系列2--调试Linux内核之中断printk(vprtink_func)

上篇介绍了“GDK7+NanoCode调试学习系列1--环境搭建”(https://blog.csdn.net/henly1217/article/details/107657070);

本篇继续学习,将尝试使用NanoCode来调试Linux内核函数,配合Linux的符号和源代码来中断printk函数。

 

准备工作:

1. 下载对应版本的Linux符号,按照张银奎老师的步骤(http://advdbg.org/blogs/advdbg_system/articles/7147.aspx)来下载符号,执行到第4步就可以下载linux符号了,Linux符号在/usr/lib/debug/boot目录下,其他ko的符号在/usr/lib/debug/lib/modules/xxxx下。

2. 下载对应版本的Linux源代码,修改/etc/apt/sources.list,这里使用了清华源(https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/);修改完之后,

sudo apt-get update // 更新

apt search linux-source // 查找匹配的

sudo apt install linux-source-x.x.x // 安装相应的源码

cd /usr/src/linux-source-x.x.x // 找到源码包linux-source-x.x.x.tar.bz2

3. 下载完对应的符号和源码包。

注:由于我的Linux内核升级到5.3.0-62-generic版本,

1)下载的Linux符号是(/usr/lib/debug/boot/vmlinux-5.3.0-62-generic),

2)其他ko的符号在(/usr/lib/debug/lib/modules/5.3.0-62-generic)下;

3)源码是(/usr/src/linux-source-5.3.0/linux-source-5.3.0.rar.bz2

4. 将内核符号(/usr/lib/debug/boot/vmlinux-5.3.0-62-generic)复制到调试主机目录下并改名为vmlinux(比如c:\temp\vmlinux);

5. 和源码包(/usr/src/linux-source-5.3.0/linux-source-5.3.0.rar.bz2)复制到主机,并解压到目录(比如d:\linux-src\linux-source-5.3.0)

 

开始调试:

1. 启动NanoCode, 选择内核调试,并中断目标Ubuntu系统,可参考上一篇中断Ubuntu(https://blog.csdn.net/henly1217/article/details/107657070#t8);

2. 中断下来之后,开始执行指令:

.sympath+ c:\temp // 添加符号路径

.reload // 重新加载

GDK7+NanoCode调试学习系列2--调试Linux内核之中断printk(vprtink_func)_第1张图片

lm // 显示模块

GDK7+NanoCode调试学习系列2--调试Linux内核之中断printk(vprtink_func)_第2张图片

3. 此时Linux的符号已经加载成功(lk是内核缩写),可以执行一下x指令来显示调试符号;

x lk!printk 

x lk!vprintk_func

GDK7+NanoCode调试学习系列2--调试Linux内核之中断printk(vprtink_func)_第3张图片

4. 然后可以使用bp/bm下断点了

bp ffffffff`ab30d0d0

GDK7+NanoCode调试学习系列2--调试Linux内核之中断printk(vprtink_func)_第4张图片

5. 这里下了vprintk_func函数的断点,在执行前,在设置一下源码路径

.srcpath+ d:\linux-src\linux-source-5.3.0

6. 然后执行g跑起来;

7. 此时,我通过一个helloworld的ko来调用了printk函数,成功断下(需要耐心等待),此时源码路径也自动打开;

k // 查看栈回溯

k P // 查看栈回溯,带参数,可以看到fmt的数据

GDK7+NanoCode调试学习系列2--调试Linux内核之中断printk(vprtink_func)_第5张图片

略带遗憾:栈回溯显示的不是很完整,需要进一步完善。

 

总结:

1. 下载Linux符号和源码

2. 中断内核函数

3. 待续。。。

你可能感兴趣的:(GDK7+NanoCode)