详细介绍创建并使用一个系统调用
来源:互联网 发布:阿里云服务器能干嘛 编辑:程序博客网 时间:2024/06/04 23:27
前提:
操作系统是centos6.5,编译的内核版本为2.6.32.61,编译linux内核过程详见本博客http://blog.csdn.net/supenman_mwg/article/details/25836547
1、修改内核文件unistd_32.h
cd /home/linux-2.6.32.61/ arch/x86/include/asm
vim unistd_32.h
要添加的内容如下所示,注意相应的位置。最好按照系统调用号的从小到大的顺序来放。
#define __NR_mwg_hello 337
修改完了之后,保存退出。
这里是我自己添加的代码,大家可以把mwg_hello换成任意字符;
下面是我自己修改代码的截图
:
2、修改内核文件syscall_table_32.S
cd /home/linux-2.6.32.61/ arch/x86/kernel
vim syscall_table_32.S
在文件的末尾添加
.long sys_mwg_hello
sys_后面的字符要和unistd_32.h中__NR_后面的字符相对应,我这里都是mwg_hello
下面是我修改文件的截图
3、修改内核文件sys_i386_32.c
cd /home/linux-2.6.32.61/ arch/x86/kernel
vim sys_i386_32.c
在文件的末尾添加系统调用函数
asmlinkage long sys_mwg_hello(void)
{
printk("mwg's first system call!\n");
return 0x5211314;
}
4、编译内核文件syscalls.h
在syscalls.h文件中添加声明
asmlinkage long sys_mwg_hello(void);
5、编译内核
修改完文件之后,编译内核并安装 详见http://blog.csdn.net/supenman_mwg/article/details/25836547
6、编写用户空间程序进行测试
我写的测试文件如下:
#include <stdio.h>
#include <sys/syscall.h>
#include <linux/unistd.h>
#define __NR_mwg_hello 337
int main()
{
int loveNum;
loveNum=syscall(__NR_mwg_hello);
printf("Love num is %x\n",loveNum);
return 0;
}
编译并运行
gcc -o mwg_hello mwg_hello.c
sudo ./mwg_hello
测试结果
Love num is 5211314
在终端下输入命令
dmesg //dmesg打印内核消息
显示结果如图
- 详细介绍创建并使用一个系统调用
- 自己创建并使用一个系统调用
- 创建和使用一个新的系统调用
- 使用MFC创建并调用ActiveX控件
- 使用MFC创建并调用ActiveX控件
- Windows系统消息大全使用详细介绍
- Windows系统消息大全使用详细介绍
- DEDECMS织梦系统的会员调用方法详细介绍
- 创建并使用一个Timer对象
- 创建一个Map服务并在Flex中调用
- 创建一个Map服务并在Flex中调用
- 3分钟完成在VS创建一个DLL并调用
- 介绍一个node创建博客的教程并总结
- 创建COM并调用
- 调用系统相册选取照片并使用系统裁剪图片
- 调用另外一个带环境变量的系统并最大化
- Android系统详细介绍
- android系统详细介绍
- Android中LinearLayout、RelativeLayout、TableLayout、AbsoluteLayout容器的使用
- PAT 1010. 一元多项式求导
- objective-c和多继承
- python3自动爬笑话
- 2014UC笔试(广州)软件开发:客户端方向(1)
- 详细介绍创建并使用一个系统调用
- [JPA] javax.persistence.EntityNotFoundException: Unable to find XXXX with id 0 问题原因
- 下载客户端向csdn博客中传代码
- 汉罗塔问题
- 【Compute Vision】,【CBIR】Bag-of-words model in computer vision
- AIX添加可以telnet远程连接账号方法
- Ubuntu root用户自动登录系统
- 数的长度--斯特林公式的运用
- 栈的基本操作——2,8,16进制的入栈(源文件)