发新话题
打印

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

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

  每个系统调用都有一个预定义的数字(见上表),那实际上是用来进行这些调用的。内核通过中断0x80来控制每一个系统调用。这些系统调用的数字以及任何参数都将被放入某些寄存器(eax用来放那些代表系统调用的数字,比如说)

那些系统调用的数字是一个被称之为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他很可能会拥有一个上面列出的最基本的列表。在第二部分中你会知道如何利用这些系统调用来实现你自己的目的。
<marquee width="90%" behavior="alternate" scrollamount="3">AMD的存在,不仅深受AMD客户的拥护,也是英特尔用户的福气,因为它打压了英特尔的高价垄断。</marquee>
发新话题