2011年8月30日
摘要: #include <linux/kernel.h>#include <linux/module.h>#include <linux/init.h>#include <linux/fs.h>#include <linux/string.h>#include <linux/mm.h>#include <linux/syscalls.h>#include <asm/unistd.h>#include <asm/uaccess.h>#define MY_FILE "/root/LogF 阅读全文
posted @ 2011-08-30 23:29 chingliuyu 阅读(630) 评论(0) 推荐(0) 编辑
摘要: Linux内核中读写文件数据的方法有时候需要在Linuxkernel--大多是在需要调试的驱动程序--中读写文件数据。在kernel中操作文件没有标准库可用,需要利用kernel的一些函数,这些函数主要有: filp_open() filp_close(), vfs_read()vfs_write(),set_fs(),get_fs()等,这些函数在linux/fs.h和asm/uaccess.h头文件中声明。下面介绍主要步骤:1. 打开文件filp_open()在kernel中可以打开文件,其原形如下:strcut file* filp_open(const char* filename, 阅读全文
posted @ 2011-08-30 23:17 chingliuyu 阅读(1132) 评论(0) 推荐(0) 编辑
2011年8月29日
摘要: 尽管内核模块不象应用程序一样顺序执行, 内核做的大部分动作是代表一个特定进程的. 内核代码可以引用当前进程, 通过存取全局项 current, 它在 <asm/current.h> 中定义, 它产生一个指针指向结构 task_struct, 在 <linux/sched.h> 定义. current 指针指向当前在运行的进程. 在一个系统调用执行期间, 例如 open 或者 read, 当前进程是发出调用的进程. 内核代码可以通过使用 current 来使用进程特定的信息, 如果它需要这样.实际上, current 不真正地是一个全局变量. 支持 SMP 系统的需要强迫 阅读全文
posted @ 2011-08-29 13:38 chingliuyu 阅读(1192) 评论(0) 推荐(0) 编辑
2011年8月28日
摘要: 《Linux内核完全剖析—基于0.12内核》第4章80x86保护模式及其编程控制寄存器(CR0~CR3)用于控制和确定处理器的操作模式以及当前执行任务的特性,如图4-3所示。CR0中含有控制处理器操作模式和状态的系统控制标志;CR1保留不用;CR2含有导致页错误的线性地址;CR3中含有页目录表物理内存基地址,因此该寄存器也被称为页目录基地址寄存器PDBR(Page-Directory Base address Register)。(点击查看大图)图4-3 控制寄存器CR0~CR31.CR0中协处理器控制位CR0的4个位:扩展类型位ET、任务切换位TS、仿真位EM和数学存在位MP用于控制80x8 阅读全文
posted @ 2011-08-28 14:25 chingliuyu 阅读(2595) 评论(0) 推荐(0) 编辑
摘要: __asm__ __volatile__ GCC的内嵌汇编语法 AT&T汇编语言语法(一)2007年05月09日 12:36开 发一个OS,尽管绝大部分代码只需要用C/C++等高级语言就可以了,但至少和硬件相关部分的代码需要使用汇编语言,另外,由于启动部分的代码有大小限 制,使用精练的汇编可以缩小目标代码的Size。另外,对于某些需要被经常调用的代码,使用汇编来写可以提高性能。所以我们必须了解汇编语言,即使你有可 能并不喜欢它。如果你是计算机专业的话,在大学里你应该学习过Intel格式的8086/80386汇编,这里就不再讨论。如果我们选择的OS开发工具是GCC以及GAS的话,就必须了 阅读全文
posted @ 2011-08-28 14:14 chingliuyu 阅读(966) 评论(0) 推荐(0) 编辑
2011年8月26日
摘要: 一个简单的linux rootkit2011-01-17 14:58http://hi.baidu.com/shazi129/blog/item/53974aec2f0fc5c32e2e21f1.html下面提供一个相对完整的rootkit,在Fedora 12上编译运行成功。#include <linux/module.h>#include <linux/kernel.h>#include <asm/unistd.h>MODULE_LICENSE("GPL");// addr of sys_call_talbe = 0xc077e3a8 阅读全文
posted @ 2011-08-26 23:34 chingliuyu 阅读(510) 评论(0) 推荐(0) 编辑
摘要: http://bbs.chinaunix.net/thread-2143235-1-1.htmlLinux System Call Tablehttp://bluemaster.iu.hio.no/edu/dark/lin-asm/syscalls.html#include <linux/kernel.h>#include <linux/init.h>#include <linux/module.h>#include <asm/uaccess.h>#include <asm/fcntl.h>#include <asm/unist 阅读全文
posted @ 2011-08-26 16:56 chingliuyu 阅读(890) 评论(0) 推荐(0) 编辑
摘要: 如果安装系统时候用到了LVG(逻辑卷管理),那么LVM分区不能够通过普通挂载方式来挂载。普通的挂载方式下我们可以指定分区格式,然后挂载:#mount -t ext3 /dev/hdb1 /mnt/hdb1对LVM分区进行挂载,前提要能够被探测到,然后激活,再挂载。1.探测VolGroup#vgscan2.激活# vgchange -a y VolGroup003.挂载#mount /dev/VolGroup00/LogVol01 /mnt/hdb2 阅读全文
posted @ 2011-08-26 14:58 chingliuyu 阅读(373) 评论(0) 推荐(0) 编辑
摘要: linux 2.6.22-14 动态添加syscall- [Linux]版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明http://technica.blogbus.com/logs/18945123.htmlLinux System Call Tablehttp://bluemaster.iu.hio.no/edu/dark/lin-asm/syscalls.html 这两天在做系统软件大作业,写一个kernel module,添加自己的syscall,实现通过访问内核全局数据获得关于所有进程和CPU等信息。作业本身不难,但是被kernel的各个版本搞死了,书上网上很多东西 阅读全文
posted @ 2011-08-26 13:48 chingliuyu 阅读(956) 评论(0) 推荐(0) 编辑
2011年8月24日
摘要: explicit作用:在C++中,explicit关键字用来修饰类的构造函数,被修饰的构造函数的类,不能发生相应的隐式类型转换,只能以显示的方式进行类型转换。explicit使用注意事项: * explicit 关键字只能用于类内部的构造函数声明上。 * explicit 关键字作用于单个参数的构造函数。 * 在C++中,explicit关键字用来修饰类的构造函数,被修饰的构造函数的类,不能发生相应的隐式类型转换转载:http://developer.51cto.com/art/201002/183398.htmC++编程语言中有很多比较重要的关键字在实际编程中起着非常重要的作用。我们今天为大 阅读全文
posted @ 2011-08-24 09:51 chingliuyu 阅读(205) 评论(0) 推荐(0) 编辑