添加系统调用
通过重新编译内核来添加系统调用
注意新内核与系统内核版本,需要的辅助工具:sudo apt install bison flex pkg-config build-essential libncurses5-dev libssl-dev libelf-dev
内核解压在/usr/src.目录下
添加系统调用号
vim ./arch/x86/entry/syscalls/syscall_64_tbl(本机是64位系统,如果是32位系统,修改syscall_32_tbl)
必须确保系统调用号是独一无二的
333 common mycopy sys_mycopy
声明系统调用函数原型
vim ./include/linux/syscall.h
asmlinkage long sys_mycopy(const char *src_file, const char *copy_file);
添加系统函数定义
vim ./kernel/sys.c
还可以创建一个模块,但是要修改根目录下的makefile文件
asmlinkage long sys_mycopy(const char *src_file,const char *copy_file){
int infd,outfd,count;
char buf[256];
mm_segment_t fs;
fs = get_fs();
set_fs(get_ds());
if((infd=sys_open(src_file,O_RDONLY,0)) == -1) {
return 1;
}
if((outfd=sys_open(copy_file,O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR))== -1){
return 2;
}
while((count = sys_read(infd,buf,256))>0)
{
if(sys_write(outfd,buf,count)!= count)
return 3;
}
if(count == -1) return 4;
sys_close(infd);
sys_close(outfd);
set_fs(fs);
return 0;
}
编译内核
sudo make menuconfig //选择save然后退出就行,生成.config文件
sudo make -j 2; //2个线程编译
sudo make modules_install //安装模块
sudo make install //安装内核
重启系统,进入新内核
- 重启系统,然后长按shift进入引导界面,高级选项
- 选择编译好的内核: 注意区分版本,是新编译好的版本是4.14.0,之前下载的那个是末尾有个old,我们选择新编译好的,进入系统。
测试调用
#include<linux/kernel.h>
#include<sys/syscall.h>
#include<unistd.h>
long int a=syscall(333,"test.c","222.c");

浙公网安备 33010602011771号