hook终端线路规则转换表中的l_read入口
2009-05-13 14:30:53来源:未知 阅读 ()
像hook 系统调用,击键记录,网络协议等,顺便也学习了内核进程的trace,很简单,分析过程那就看各人了。
比如:ktrace ls
kdump
显然,ktrace能让内核对指定的进程进行跟踪记录,而kdump用于显示跟踪的数据。
最重要的就是今天的主题了,hook终端线路规则转换表。
hook.c
#include sys/param.h>
#include sys/systm.h>
#include sys/malloc.h>
#include sys/mbuf.h>
#include sys/priv.h>
#include sys/proc.h>
#include sys/socket.h>
#include sys/sockio.h>
#include sys/fcntl.h>
#include sys/signalvar.h>
#include sys/tty.h>
#include sys/clist.h>
#include sys/kernel.h>
#include sys/conf.h>
#include sys/module.h>
#include sys/proc.h>
static int
stopen(struct cdev *dev, struct tty *tp)
{
printf("hook the stopen here!!!!\n"); return (ENODEV);
}
static struct linesw slipdisc = {
.l_open = stopen
};
/* The function called at load/unload. */
static int
load(module_t *module, int type, void *data)
{
switch (type) {
case MOD_LOAD:
ldisc_register(TTYDISC, &slipdisc);
break;
case MOD_UNLOAD:
ldisc_deregister(TTYDISC);
printf("switch_table module unload - not possible for this module type\n");
return EINVAL;
default:
return EOPNOTSUPP;
}
return 0;
}
static moduledata_t st_mod = {
"switch_table",
load,
0
};
DECLARE_MODULE(switch_table, st_mod, SI_SUB_DRIVERS, SI_ORDER_MIDDLE);
hook l_open实现就是打印语句,为了检测是否hook成功。
所以需要的知识都在freebsd的代码里有,比如得熟悉linesw[]转换表。linesw[]实现在文件/sys/kern/tty_conf.c 中。还得熟悉linesw 结构,它定义在头文件 中。
有点遗憾,我不能完成保证是合乎要求。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:中文 pidgin-2.4.3
- FreeBSD 内建的防火墙指令ipfw英译汉 2009-05-13
- OpenBSD 3.x 防火墙 PF配置新手指南 2009-05-13
- PF防火墙详解 2009-05-13
- windows事件转换syslog进行采集 2009-05-13
- nginx location的匹配优先规则 2009-05-13
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash