当前位置:首页 > 多媒体相关

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



热门问答:
  • 请问,如何得到一个SQL执行后的Recordcount的条数啊?(没有用过ado.net的,好像和ado差比较远了) [详细内容]
  • 请问高手如何实时监测CPU是忙还是闲,我要根据这个东西调整自己的代码执行。 [详细内容]
  • 还原精灵 [详细内容]
  • 请问SQL的补丁是否很重要? [详细内容]
  • 基于Java的开源项目有那些?其大概的内容和目标是什么? [详细内容]

  • 推荐阅读
      · 修改面板来隐藏运营商文字和日期
        摘要:用motokit来隐藏运营商文字和日期很简单,但那是在开通gprs给前提的,对于有些使用联通卡的朋友来说就有点麻烦,下面我就来介绍一下用修改面板的方法来隐藏运营商文字和日期,需要用到的软件是p2kcommander、motoskin、motokit,这里我只说说motoskin,另外两个软件的使用前面的宝典有详细说明。 首先把需要修改的面板下载到电脑,然后用mot......
      · 内容、应用、搜索、web2.0 谁领跑下一代门户
        摘要:    门户是互联网的通道,也一直是顶级互联网公司争夺的中心,它同时引领了中国互联网公司的商业化浪潮。在很多人眼中,门户就是互联网。但近两年,传统的门户风光不再,非传统门户—下一代的门户正在崛起并取而代之。下一代门户的核心正是内容和应用的整合、搜索技术以及web2.0理念。而兼具以上特征的个人门户正是下一代门户的典型形态。  呼之欲出的下一代门户  自从去年百度成功上市后,中国互联网市场就一直暗潮涌动,颇不平静。......

    正文

      上期我们讲了《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时你所面对的第一个问题是:

      我到底该截获哪个系统调用?

    讨论区

    Login