定位可动态加载的内核模块的OOPS代码行Linux认证考试

文章作者 100test 发表时间 2009:10:27 11:56:13
来源 100Test.Com百考试题网


  1. 从vmlinux获取具体的代码行

  文章中albcamus版主也提到了,需要有自己编译的vmlinux,而且编译时打开compile with debug info. 这个选项打开之后会使vmlinux文件比不加调试信息大一些。我这里代调试信息的是49M。建议如果学习的时候,想使用gdb的方式获取出错代码行的 话,就加上这个编译条件。

  然后就可以按照具体的方法去操作,可以定位到具体的C 代码行。

  2. 从自己编译的内核模块出错信息中获取代码行以ldd3中提供的misc-modules/faulty.c为例。主要以faulty_write函数作分析。

  (1)由于作者提供的函数代码就一样,过于简单,我这里简单加上一些代码(也就是判断和赋值),如下:

  ssize_t faulty_write (struct file *filp, const char __user *buf, size_t count,

  loff_t *pos)

  {

  /* make a simple fault by dereferencing a NULL pointer */

  if(count >. 0x100)

  count = 0x100.

  *(int *)0 = 0.

  return count.

  }

  (2)编译该模块,并且mknod /dev/faulty(3)向该模块写入数据:echo 1 >. /dev/faulty, 内核OOPS,信息如下:

  <.1>.BUG: unable to handle kernel NULL pointer dereference at virtual address 00000000

  printing eip:

  f8e8000e

  *pde = 00000000

  Oops: 0002 [#3]

  SMP

  Modules linked in: faulty autofs4 hidp rfcomm l2cap ...... //此处省略若干字符


相关文章


shell脚本中一些特殊符号Linux认证考试
naigos实现监控短信报警Linux认证考试
使用syslinux引导linux系统Linux认证考试
tcp要点学习断开连接Linux认证考试
定位可动态加载的内核模块的OOPS代码行Linux认证考试
Unix动态库和静态库比较Linux认证考试
查看硬盘参数 CPU参数温度等Linux认证考试
细谈linuxgcc的概念及其参数Linux认证考试
轻松了解Linux打印之CUPS软件Linux认证考试
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛