- 论坛徽章:
- 0
|
其实我完全是看了近期的一篇关于劫持函数的贴子后,
先作的是如下的模块,完全按照CLF的teawater兄的方法做的,
加载没问题,不会死机的,但改成另一个函数就老死机,怎末回事呢:
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/init.h>
#include <linux/types.h>
#include <linux/string.h>
#include <linux/fs.h> //register_chrdev
int my_register_chrdev(unsigned int major, const char *name, struct file_operations *fops)
{
printk("Hi, do you really want to call register_chrdev?\n");
return -1;
}
u_char tmp[5];
static int __init init(void)
{
u_char *buf;
long p;
printk("Hi, i'll replace register_chrdev()...\n");
buf = (u_char *)register_chrdev;
p = (long)my_register_chrdev - (long)register_chrdev + (long)5;
memcpy(tmp, buf, 5);
buf[0] = 0xe9;
memcpy( buf + 1, &p, 4);
return 0;
}
static void __exit fini(void)
{
u_char *buf;
printk("Hi, i'll restore register_chrdev()...\n");
buf = (u_char *)register_chrdev;
memcpy(buf, tmp, 5);
}
module_init(init);
module_exit(fini);
MODULE_LICENSE("GPL"); |
|