¦blinux¾Þ§@«Y²Î¤¤¦p¦óºIÀò«Y²Î½Õ¥Î
¨Ï¥ÎLinuxKernelModuleªº¤@¯ë¥Øªº´N¬OÂX®i«Y²Îªº¥\¯à¡A©ÎªÌµ¹¬Y¨Ç¯S®íªº³]³Æ´£¨ÑÅX°Êµ¥µ¥¡C¨ä¹ê§Q¥ÎLinux¤º®Ö¼Ò¶ô§ÚÌÁÙ¥i¥H°µ¤@¨Ç¤ñ¸û¡§¶Â«È¡¨ªº¨Æ±¡¡A¨Ò¦p¥Î¨ÓÄdºI«Y²Î½Õ¥Î¡AµM«á¦Û¤v³B²z¡C¼K¼K¡A¦³·N«äªº»¡¡C¤U±µ¹¥X¤@Ó²³æªº¨Ò¤l¡A»¡©ú¤F¨ä°ò¥»ªº¤u§@¹Lµ{¡C
¡@
[table=95%][tr][td][color=#ff0000]¥H¤U¬°¤Þ¥Îªº¤º®e¡G[/color]
¡@¡@#defineMODULE
¡@¡@#define__KERNEL__
¡@¡@#include<linux/module.h>
¡@¡@#include<linux/kernel.h>
¡@¡@#include<asm/unistd.h>
¡@¡@#include<sys/syscall.h>
¡@¡@#include<linux/types.h>
¡@¡@#include<linux/dirent.h>
¡@¡@#include<linux/string.h>
¡@¡@#include<linux/fs.h>
¡@¡@#include<linux/malloc.h>
¡@¡@externvoid*sys_call_table[];/*sys_call_tableisexported,sowecanaccessit*/
¡@¡@int(*orig_mkdir)(constchar*path);/*theoriginalsystemcall*/
¡@¡@inthacked_mkdir(constchar*path)
¡@¡@{
¡@¡@return0;/*everythingisok,buthenewsystemcall
¡@¡@doesnothing*/
¡@¡@}
¡@¡@intinit_module(void)/*modulesetup*/
¡@¡@{
¡@¡@orig_mkdir=sys_call_table[SYS_mkdir];
¡@¡@sys_call_table[SYS_mkdir]=hacked_mkdir;
¡@¡@return0;
¡@¡@}
¡@¡@voidcleanup_module(void)/*moduleshutdown*/
¡@¡@{
¡@¡@sys_call_table[SYS_mkdir]=orig_mkdir;/*setmkdirsyscalltotheorigal
¡@¡@one*/
¡@¡@}[/td][/tr][/table]
¡@¡@
¤j®a¬Ý¨ì«e±ªº¥N½X¤F¡A«D±`²³æ¡A§ÚÌ´N¬O´À´«¤F¤º®Öªº«Y²Î½Õ¥Î¼Æ²Õ¤¤§ÚÌÃö¤ßªº«ü°wªºÈ¡A«Y²Î½Õ¥Î¦b¤º®Ö¤¤¹ê»Ú´N¬O¤@ӼƲզCªí«ü°w¹ïÀ³ªº¨ç¼Æ¦Cªí¡C§Ú̳q¹L´À´«§ÚÌ·Q¡§¶Â¡¨ªº¨ç¼Æªº«ü°w¡A´N¥i¥H¹F¨ì§Ú̯S©wªº¥Øªº¡C³oÓ¨Ò¤l¤¤§ÚÌ´À´«¤F¡§mkdir¡¨³oÓ¨ç¼Æ¡C³o¼Ë¡A¥Î¤áªºÀ³¥Îµ{§Ç¦pªG½Õ¥Îmkdir«á¡A·í¤º®ÖÅTÀ³ªº®ÉÔ¡A¹ê»Ú¤W¬O½Õ¥Î§ÚÌ¡§¶Â¡¨¤Fªº¨ç¼Æ¡A¦Ó§Ú̹ê²{ªº¨ç¼Æùر¬O¤°¤\³£¨S¦³·F¡A©Ò¥H³oùØ·|¾ÉP¥Î¤á¹B¦æ ¡§mkdir¡¨±o¤£¨ìµ²ªG¡C³oÓ¨Ò¤l«Ü²³æ¡A¦ý¬O§ÚÌ¥i¥H¬Ý¥X¡A¦pªG§ÚÌ·QºIÀò¤@Ó«Y²Î½Õ¥Î¡A¨º¤\§ÚÌ¥u»Ýn°µ¥H¤Uªº¨Æ±¡¡G [color=#f5fafe][/color] 1¡B¬d§ä¥X·P¿³½ìªº«Y²Î½Õ¥Î¦b«Y²Î¤º®Ö¼Æ²Õ¤¤ªº¤J¤f¦ì¸m¡C¥i¥H°Ñ¬Ýinclude/sys/syscall.h¤å¥ó¡C [color=#f5fafe][/color]
2¡B±N¤º®Ö¤¤ì¨Óªº½Õ¥Î¨ç¼Æ¹ïÀ³ªº«ü°wsys_call_table[X]«O¯d¤U¨Ó¡C [color=#f5fafe][/color]
3¡B±N§ÚÌ·sªº°°³yªº«Y²Î¨ç¼Æ«ü°wµ¹sys_call_table[X]¡C
¶:
[1]
