時,我有一個簡單的模塊,像這樣:內核崩潰提領一空指針
#define MODULE
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/init.h>
int init_module(void) {
struct inode {
int i_ino;
};
struct dentry {
struct inode *d_inode;
};
struct dentry *f_dentry;
f_dentry = NULL;
struct inode * p = f_dentry->d_inode;
return 0;
}
void cleanup_module(void) {
printk("Goodbye world\n");
}
而且我Makefile
是這樣的:
obj-m += oops.o
all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
make -C /lib/modules$(shell uname -r)/build M=$(PWD) clean
我想到的是,內核會崩潰,因爲struct inode * p = f_dentry->d_inode;
已提領一個空指針,對吧?但事實並非如此。我的想法有問題嗎?好吧,現在我再試一次。如果我的模塊是這樣的:
#define MODULE
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/init.h>
int init_module(void) {
*(int *)0 = 0;
return 0;
}
void cleanup_module(void) {
printk("Goodbye world\n");
}
我的電腦真的崩潰了。或者我之前的例子有什麼不對?它不取消引用空指針?
@nos感謝您的回覆。但那不是重點。這沒有影響。 – HuangJie