linux+内核调试+张银奎,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 // 重新加载

d0cb9ab95f5bf9ef1e94e92641014383.png

lm // 显示模块

e4fc349e8184fcdac9868aa741aec09b.png

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

x lk!printk

x lk!vprintk_func

b2b2792c2d7f855299bd8ce7909d316c.png

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

bp ffffffff`ab30d0d0

fbc1758695b301ca118f31914e3ac14b.png

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

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

6. 然后执行g跑起来;

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

k // 查看栈回溯

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

81de047077378a7d81dfa7829468af69.png

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

总结:

1. 下载Linux符号和源码

2. 中断内核函数

3. 待续。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值