频道直达 - 专题 - 新闻 - 技巧 - 组网 - 开发 - 安全 - web编程 - 图像 - 操作系统 - 数据库 - 教育 - 旅游 - 健康 - 时尚 - 驱动 - 软件 - 游戏 - 多媒体 - ERP - 讨论组

Linux系统可卸载内核模块完全指南(中)

来源:蓝森林 作者: 出处:巧巧读书 2006-01-29 进入讨论组
下一页 1 2 3 4 

  上期我们讲了《Linux系统可卸载内核模块完全指南(上)》的内容,本期我们讲中间部份的内容。

  第二部分 渐入佳境

  2.1 如何截获系统调用

  现在我们开始入侵LKM,在正常情况下LKMs是用来扩展内核的(特别是那些硬件驱动)。然而我们的‘Hacks’做一些不一样的事情。他们会截获系统调用并且更改他们,为了改变系统某些命令的响应方式。

  下面的这个模块可以使得任何用户都不能创建目录。这只不过是我们随后方法的一个小小演示。

  #define MODULE

  #define __KERNEL__

  #include

  #include

  #include

  #include

  #include

  #include

  #include

  #include

  #include

  #include

  #include

  #include

  #include

  extern void* sys_call_table[];

  /*sys_call_talbe 被引入,所以我们可以存取他*/

  int (*orig_mkdir)(const char *path);

  /*原始系统调用*/

  int hacked_mkdir(const char *path)

  {

  return 0;

  /*其他一切正常,除了新建操作,该操作什么也不做*/

  }

  int init_module(void)

  /*初始化模块*/

  {

  orig_mkdir=sys_call_table[SYS_mkdir];

  sys_call_table[SYS_mkdir]=hacked_mkdir;

  return 0;

  }

  void cleanup_module(void)

  /*卸载模块*/

  {

  sys_call_table[SYS_mkdir]=orig_mkdir;

  /*恢复mkdir系统调用到原来的哪个*/

  }

  编译并启动这个模块(见1.1)。然后尝试新建一个目录,你会发现不能成功。由于返回值是0(代表一切正常)我们得不到任何出错信息。在移区模块之后,我们又可以新建目录了。正如你所看到的,我们只需要改变sys_call_table(见1.2)中相对应的入口就可以截获到系统调用了。

  截获系统调用的通常步骤如下:

  找到你需要的系统调用在sys_call_table[]中的入口(看一眼include/sys/syscall.h)

  保存sys_call_table[x]的旧入口指针。(在这里x代表你所想要截获的系统调用的索引)

  将你自己定义的新的函数指针存入sys_call_table[x]

  你会意识到保存旧的系统调用指针是十分有用的,因为在你的新调用中你会需要他来模拟原始调用。当你在写一个'Hack-LKM'时你所面对的第一个问题是:

  我到底该截获哪个系统调用?保留:: http://www.qqread.com/linux/y841248206.html 更多文章 更多内容请看系统优化大全系统安全设置系统安装手册专题,或进入讨论组讨论。

下一页 1 2 3 4 
收藏此文】【 】【打印】【关闭
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
巧巧读书宗旨
相关专题
讨论组问题推荐
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
Photoshop教 程照片处理 照片制作 PS快捷键 抠图
计 算 机 故 障XP系统修复
艺 术 与 设 计设计 流媒体 设计欣赏 边框
计 算 机 安 全ARP
站内频道文章精选
巧巧电脑频道编辑信箱  告诉我们您想看的专题或文章