|
我调用getuid()得到uid=0,就想添加一个简单的系统调用,把uid改成1来试验系统调用是否成功,具体操作如下:
在/usr/src/linux-2.4.20-8/include/asm-i386/unistd.h添加
#define __NR_mysyscall 255
在/usr/src/linux-2.4.20-8/arch/i386/kernel/entry.S添加
.long SYMBOL_NAME(sys_mysyscall)
在/usr/src/linux-2.4.20-8/arch/i386/kernel/sys.c添加
asmlinkage int sys_mysyscall(void)
{
int errno;
current->uid = current->euid = current->suid = current->fsuid = 1;
return 0;
}
我的用户态程序是:
#include</usr/src/linux-2.4.20-8/include/asm-i386/unistd.h>
_syscall0(int,mysyscall)
int main()
{
mysyscall();
printf("my uid is:%d.\n",getuid());
}
********************************
我用的系统是redhat9.0,在用gcc编译时出现了这样的问题:
[root@localhost learn]# gcc -o syscall syscall.c
syscall.c: In function `mysyscall':
syscall.c:3: `errno' undeclared (first use in this function)
syscall.c:3: (Each undeclared identifier is reported only once
syscall.c:3: for each function it appears in.)
不知道问题出在哪里了,我在asmlinkage int sys_mysyscall(void)中定义errno就是为了解决这个错误,可加了也没有用.请高手们指点如何改正错误,同时指导一下怎么添加自己的系统调用 |
|