Kernel Oops
当我们编写的Linux内核程序含有Bug时会出现下面所示的情况,屏幕输出内核错误信息,我们称之为Oops。此时系统需要重启才能继续使用。
注意,这里有三行十分重要。BUG指出了错误原因,IP寄存器的值则指出了错误位置相对于函数开始位置的偏移量。比如下面的出错位置在距离函数hydra_hook_func_out开始位置偏移量为0xb8的机器代码处。后文还会提到它们。Oops指出了错误代码,含义如下:
- bit 0 == 0 means no page found, 1 means protection fault
- bit 1 == 0 means read, 1 means write
- bit 2 == 0 means kernel, 1 means user-mode
- bit 3 == 0 means data, 1 means instruction
这里的错误代码 0000 意思是内核数据读错误。 #1 表示这个错误发生一次。
|
|
获取调试信息
使用printk函数和dmesg命令
这是最基本的用法,把怀疑出错的地方打印出来再检验。假如没有内核没有出错或者已经注释掉可能出错的部分,可以用此法。