2.6.20后添加访问系统调用的方式

 
1. 定义系统调用号 ,/usr/src/linux/include/asm-i386/unistd.h
#define _NR_sysmycall 318 // 不能与前面已有的重复
#define _NR_syscalls  319// 修改系统中所用系统调用数目 
2. 在系统调用向量表里添加自定义的系统调用函数入口位置,
/usr/src/linux/arch/i386/kernel/syscall_table.S ,以前老版本是 entry.s
.long sys_mysyscall
3.添加系统调用定义在include/linux/syscalls.h
asmlinkage long sys_add_trustdb(u8 __user * digest,u8 __user *name,int new);
特别注意使用用户态的指针,需要添加__user
4.在需要的地方添加系统调用实现函数
asmlinkage int sys_mysyscall(int a)
{
           return a;
}
编写用户态代码测试
int main(void)
{
   int a=syscall(318,100);//318 是系统调用号, 100 是参数
   printf("%d/n",a);
   return 0;
}
syscall 是内核提供为用户程序的一个函数,

如果不使用syscall函数,也可以使用宏定义,但是在2.6.20以后的版本里,没有宏定义,需要自己从其他版本里复制过来添加。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值