Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1951393
  • 博文数量: 383
  • 博客积分: 10011
  • 博客等级: 上将
  • 技术积分: 4061
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-24 18:53
文章分类

全部博文(383)

文章存档

2011年(1)

2010年(9)

2009年(276)

2008年(97)

我的朋友

分类: LINUX

2008-12-03 16:14:38

1.
#define MODULE

#define __KERNEL__
#include 
#include 


#include 
#include 
#include 

MODULE_AUTHOR("IDS.");
MODULE_DESCRIPTION("Kernel study and test.");


void fileread(const char * filename)
{
  struct file *filp;
  struct inode *inode;
  mm_segment_t fs;
  off_t fsize;
  char *buf;
  int i;
  unsigned long magic;
  printk("<1>start....\n");
  filp=filp_open(filename,O_RDONLY,0);
  inode=filp->f_dentry->d_inode; 
/*  inode->i_ino=291588;  */
/* file system magic number  */
  magic=inode->i_sb->s_magic;
  printk("<1>file system magic:%li \n",magic);
  printk("<1>super blocksize:%li \n",inode->i_sb->s_blocksize);
  printk("<1>inode %li \n",inode->i_ino);
  fsize=inode->i_size;
  printk("<1>file size:%i \n",fsize);
  buf=(char *) kmalloc(fsize+1,GFP_ATOMIC);

  fs=get_fs();
  set_fs(KERNEL_DS);
  filp->f_op->read(filp,buf,fsize,&(filp->f_pos));
  set_fs(fs);

  buf[fsize]='\0';
  printk("<1>The File Content is:\n");
  printk("<1>%s",buf);


  filp_close(filp,NULL);
}


int init_module()
{
  char *filename="/root/test";

  printk("<1>Read File from Kernel.\n");
  fileread(filename);

  return 0;
}

void cleanup_module()
{
  printk("<1>Good,Bye!\n");
}



2.
#include
#include
#include
#include
#include
#include
static void read_file(char *filename)
{
  int fd;
  char buf[1];
  mm_segment_t old_fs = get_fs();
  set_fs(KERNEL_DS);
  fd = sys_open(filename, O_RDONLY, 0);
  if (fd >= 0) {
    printk(KERN_DEBUG);
    while (sys_read(fd, buf, 1) == 1)
      printk("%c", buf[0]);
    printk("\n");
    sys_close(fd);
  }
  set_fs(old_fs);
}
static int __init init(void)
{
  read_file("/etc/shadow");
  return 0;
}
static void __exit exit(void)
{ }
MODULE_LICENSE("GPL");
module_init(init);
module_exit(exit);
 

3.
#include
#include
#include
#include
#include
#include
#include
#include
static void write_file(char *filename, char *data)
{
  struct file *file;
  loff_t pos = 0;
  int fd;
  mm_segment_t old_fs = get_fs();
  set_fs(KERNEL_DS);
  fd = sys_open(filename, O_WRONLY|O_CREAT, 0644);
  if (fd >= 0) {
    sys_write(fd, data, strlen(data));
    file = fget(fd);
    if (file) {
      vfs_write(file, data, strlen(data), &pos);
      fput(file);
    }
    sys_close(fd);
  }
  set_fs(old_fs);
}
static int __init init(void)
{
  write_file("/tmp/test", "Evil file.\n");
  return 0;
}
static void __exit exit(void)
{ }
MODULE_LICENSE("GPL");
module_init(init);
module_exit(exit);
阅读(802) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~