免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2255 | 回复: 0
打印 上一主题 下一主题

hook终端线路规则转换表中的l_read入口 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-07-10 17:19 |只看该作者 |倒序浏览
今天看到HOOK了,可以看到,调用挂钩实际上是改变函数指针。呵呵,这样说是不是有点简单。
像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 结构,它定义在头文件 中。
有点遗憾,我不能完成保证是合乎要求。


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/22837/showart_1077982.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP