Chinaunix首页 | 论坛 | 博客
  • 博客访问: 172870
  • 博文数量: 60
  • 博客积分: 677
  • 博客等级: 上士
  • 技术积分: 667
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-30 15:49
文章分类

全部博文(60)

文章存档

2015年(1)

2013年(6)

2012年(16)

2011年(9)

2010年(28)

我的朋友

分类: BSD

2012-01-12 16:45:54

前面的博文里介绍过如果用串口进行远程kernel调试,但如何调试可加载的内核模块呢?
我们举例加以介绍:假设想调试目标主机上的pf.ko,先去目标主机获得以下东西:
  1. $ kldstat
  2. Id Refs Address Size Name
  3. 1 2 0xffffffff80100000 b4afb8 kernel
  4. 2 1 0xffffffff80e22000 2b150 pf.ko
主要是获得目标主机的pf.ko模块的加载地址“0xffffffff80e22000”

然后再开发机上按-g方式编译模块,编译好之后,要用objdump查看,找到在内核模块中,文本段的偏移量
  1. [root@fb73_vm114 /usr/src/sys/modules/pf]# objdump --section-headers ./pf.ko | grep text
  2. 0 .text 0002776f 0000000000000000 0000000000000000 00000040 2**4
取16进制模式的第4个数据,这里是00000040,和前面的地址“0xffffffff80e22000”加一起获得一个值“0xFFFFFFFF80E22040”,这个值就是内核模块文本段在内核中的加载地址。
这时把内核模块的符号加入gdb
  1. (kgdb) add-symbol-file /usr/src/sys/modules/pf/pf.ko 0xFFFFFFFF80E22040
  2. add symbol table from file "/usr/src/sys/modules/pf/pf.ko" at
  3. .text_addr = 0xffffffff80e22040
  4. (y or n) y
这样就完事了,可以跟踪调试内核模块了
阅读(3456) | 评论(0) | 转发(0) |
0

上一篇:freebsd7.0的smb服务器安装

下一篇:你妈的QQ

给主人留下些什么吧!~~