- 论坛徽章:
- 0
|
应该是这样吧, 但是貌似不起作用,dmesg看不到printk("i hjiack the tty_insert_flip_strintg...\n");这个信息。
- #include <linux/kernel.h>
- #include <linux/init.h>
- #include <linux/module.h>
- #include <linux/tty.h>
- extern int tty_insert_flip_string(struct tty_struct *tty, const unsigned char *chars,
- size_t size);
- u_char tmp[5];
- int new_tty_insert_flip_string(struct tty_struct *tty, const unsigned char *chars,
- size_t size)
- {
- printk("i hjiack the tty_insert_flip_strintg...\n");
- return (*tty_insert_flip_string)(tty, chars, size);
- }
- static int tty_test(void)
- {
- u_char *buf;
- long p;
- printk("\nrepalce tty_insert_flip_string...\n");
- //printk("tty_insert_flip_string: %x\n", (unsigned int)tty_insert_flip_string);
- //printk("new_tty_insert_flip_string: %x\n", (unsigned int)new_tty_insert_flip_string);
- buf = (u_char *)tty_insert_flip_string;
- p = (long)new_tty_insert_flip_string - (long)tty_insert_flip_string + (long)5;
- memcpy(tmp, buf, 5);
- buf[0] = 0xe9;
- memcpy(buf + 1, &p, 4);
- printk("tty_insert_flip_string: %x\n", (unsigned int)tty_insert_flip_string);
- return 0;
- }
- static void tty_exit(void)
- {
- u_char *buf;
- printk("restore tty_insert_flip_string...\n");
- buf = (u_char *)tty_insert_flip_string;
- memcpy(buf, tmp, 5);
- }
- module_init(tty_test);
- module_exit(tty_exit);
- MODULE_LICENSE("GPL");
- MODULE_AUTHOR("wzt");
复制代码 |
|