科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道Linux系统可卸载内核模块完全指南 (3)

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

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

那些系统调用的数字是一个被称之为sys_call_table[]的内核中的数组结构的索引值.这个结构把系统调用的数字映射到实际使用的函数.

作者:林纳 来源:silversand.net 2007年11月4日

关键字: 模块 内核 卸载 Linux

  • 评论
  • 分享微博
  • 分享邮件

那些系统调用的数字是一个被称之为sys_call_table[]的内核中的数组结构的索引值.这个结构把系统调用的数字映射到实际使用的函数.

  OK,这些是继续阅读所必须的足够知识了.下面的表列出了那些最有意思的系统调用以及一些简短的注释.相信我,为了你能够真正的写出有用的LKM你必须确实懂得那些系统调

  用是如何工作的.

  系统调用列表:

 

 int sys_brk(unsigned long new_brk);
  改变DS(数据段)的大小->这个系统调用会在1.4中讨论
  int sys_fork(struct pt_regs regs);
  著名的fork()所用的系统调用
  int sys_getuid ()
  int sys_setuid (uid_t uid)
  用于管理UID等等的系统调用
  int sys_get_kernel_sysms(struct kernel_sym *table)
  用于存取系统函数表的系统调用(->1.3)
  int sys_sethostname (char *name, int len);
  int sys_gethostname (char *name, int len);
  sys_sethostname是用来设置主机名(hostname)的,sys_gethostname是用来取的
  int sys_chdir (const char *path);
  int sys_fchdir (unsigned int fd);
  两个函数都是用于设置当前的目录的(cd ...)
  int sys_chmod (const char *filename, mode_t mode);
  int sys_chown (const char *filename, mode_t mode);
  int sys_fchmod (unsigned int fildes, mode_t mode);
  int sys_fchown (unsigned int fildes, mode_t mode);
  用于管理权限的函数
  int sys_chroot (const char *filename);
  用于设置运行进程的根目录的
  int sys_execve (struct pt_regs regs);
  非常重要的系统调用->用于执行一个可执行文件的(pt_regs是堆栈寄存器)
  long sys_fcntl (unsigned int fd, unsigned int cmd, unsigned long arg);
  改变fd(打开文件描述符)的属性的
  int sym_link (const char *oldname, const char *newname);
  int sys_unlink (const char *name);
  用于管理硬/软链接的函数
  int sys_rename (const char *oldname, const char *newname);
  用于改变文件名
  int sys_rmdir (const char* name);
  int sys_mkdir (const *char filename, int mode);
  用于新建已经删除目录
  int sys_open (const char *filename, int mode);
  int sys_close (unsigned int fd);
  所有和打开文件(包括新建)有关的操作,还有关闭文件的.
  int sys_read (unsigned int fd, char *buf, unsigned int count);
  int sys_write (unsigned int fd, char *buf, unsigned int count);
  读写文件的系统调用
  int sys_getdents (unsigned int fd, struct dirent *dirent, unsigned int count);
  用于取得文件列表的系统调用(ls...命令)
  int sys_readlink (const char *path, char *buf, int bufsize);
  读符号链接的系统调用
  int sys_selectt (int n, fd_set *inp, fd_set *outp, fd_set *exp, struct timeval *tvp);
  多路复用I/O操作
  sys_socketcall (int call, unsigned long args);
  socket 函数
  unsigned long sys_create_module (char *name, unsigned long size);
  int sys_delete_module (char *name);
  int sys_query_module (const char *name, int which, void *buf, size_t bufsize,
  size_t *ret);

  用于模块的加载/卸载和查询.

  以上就是我认为入侵者会感兴趣的系统调用.当然如果要获得系统的root权你有可能需要一些特殊的系统调用,但是作为一个hacker他很可能会拥有一个上面列出的最基本的列表.在第二部分中你会知道如何利用这些系统调用来实现你自己的目的。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章