Pointers 取消引用空指针时内核崩溃
我有一个简单的模块,如下所示:Pointers 取消引用空指针时内核崩溃,pointers,module,linux-kernel,dereference,Pointers,Module,Linux Kernel,Dereference,我有一个简单的模块,如下所示: #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;
#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");
}
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
#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");
}
我预计内核会崩溃,因为struct inode*p=f\u dentry->d\u inode代码>取消了对空指针的引用,对吗?但事实并非如此。我的想法有什么问题吗?
好吧,现在我再试一次。如果我的模块是这样的:
#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");
}
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
#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");
}
#定义模块
#包括
#包括
#包括
int init_模块(void){
*(int*)0=0;
返回0;
}
空洞清理_模块(空洞){
printk(“再见世界”);
}
我的电脑真的崩溃了。或者我以前的例子有什么问题?它不会取消对空指针的引用?如果查看汇编代码(例如通过objdump-D oops.ko),所有init_module()都会被优化掉,可能是因为它没有做任何事情
例如,如果你做p->i_ino=1代码>,您可能会看到不同的结果(尽管这是未定义的行为,因此无法直接解释代码将要做什么-在这种情况下,最好也检查程序集)。@nos谢谢您的回复。但这不是重点。这没有影响。是的,如果我加上p->I_ino=1代码>,我的计算机立即崩溃。谢谢你抽出时间。