操作系统

Linux系统可卸载内核模块完全指南(上)(2)
作者 dupeng144 2006年08月18日 01:49

      #define SYS_ipc 117

       

       #define SYS_fsync 118

       

       #define SYS_sigreturn 119

       

       #define SYS_clone 120

       

       #define SYS_setdomainname 121

       

       #define SYS_uname 122

       

       #define SYS_modify_ldt 123

       

       #define SYS_adjtimex 124

       

       #define SYS_mprotect 125

       

       #define SYS_sigprocmask 126

       

       #define SYS_create_module 127

       

       #define SYS_init_module 128

       

       #define SYS_delete_module 129

       

       #define SYS_get_kernel_syms 130

       

       #define SYS_quotactl 131

       

       #define SYS_getpgid 132

       

       #define SYS_fchdir 133

       

       #define SYS_bdflush 134

       

       #define SYS_sysfs 135

       

       #define SYS_personality 136

       

       #define SYS_afs_syscall 137

       

       #define SYS_setfsuid 138

       

       #define SYS_setfsgid 139

       

       #define SYS__llseek 140

       

       #define SYS_getdents 141

       

       #define SYS__newselect 142

       

       #define SYS_flock 143

       

       #define SYS_syscall_flock SYS_flock

       

       #define SYS_msync 144

       

       #define SYS_readv 145

       

       #define SYS_syscall_readv SYS_readv

       

       #define SYS_writev 146

       

       #define SYS_syscall_writev SYS_writev

       

       #define SYS_getsid 147

       

       #define SYS_fdatasync 148

       

       #define SYS__sysctl 149

       

       #define SYS_mlock 150

       

       #define SYS_munlock 151

       

       #define SYS_mlockall 152

       

       #define SYS_munlockall 153

       

       #define SYS_sched_setparam 154

       

       #define SYS_sched_getparam 155

       

       #define SYS_sched_setscheduler 156

       

       #define SYS_sched_getscheduler 157

       

       #define SYS_sched_yield 158

       

       #define SYS_sched_get_priority_max 159

       

       #define SYS_sched_get_priority_min 160

       

       #define SYS_sched_rr_get_interval 161

       

       #define SYS_nanosleep 162

       

       #define SYS_mremap 163

       

       #define SYS_setresuid 164

       

       #define SYS_getresuid 165

       

       #define SYS_vm86 166

       

       #define SYS_query_module 167

       

       #define SYS_poll 168

       

       #define SYS_syscall_poll SYS_poll

       

       #endif /* */

       

       每个系统调用都有一个预定义的数字(见上表),那实际上是用来进行这些调用的.内核通过中断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他很可能会拥有一个上面列出的最基本的列表.在第二部分中你会知道如何利用这些系统调用来实现你自己的目的.

    

     本文引用地址:

    http://www.86bzl.com/network_institute/2006/0712/content_891.htm

     来源:宝之林(

    http://www.86bzl.com/

    )

    

    

    本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/22249/showart_157032.html

打开APP阅读全文

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

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

长按识别二维码 进入IT168查看全文

请长按保存图片
{{data.thematic.text}}

相关文章

加载中...

分享到

请使用浏览器的分享功能
分享到微信等