|
题目:在现有的系统调用中添加一个不用传递参数的系统调用
功能要求:调用这个系统调用,使用户的uid等于0
一、修改/usr/include/asm/unistd.h
在这个文件中添加:
- #define __NR_mysyscall 243
-
复制代码
二、修改/usr/src/linux/arch/i386/kernel/entry.S
在这个文件中添加
.long SYMBOL_NAME(sys_mysyscall)
三、修改/usr/src/linux/kernel/sys.c
在这个文件中添加
- asmlinkage int sys_mysyscall(void)
- {
- current->uid = current->euid = current->suid = current->fsuid =0
- return 0;
- }
-
复制代码
四、编写用户态程序mycall.c
- #include <linux/unistd.h>
- #include <stdio.h>
- _syscall0(int,mysyscall)
- int main()
- {
- mysyscall();
- printf("mycall uid is %d\n", getuid());
- }
-
复制代码
在内核版本为2.4.20-8下编译:
gcc mycall.c -o mycall
出现错误:
in function 'mysyscall':
undefined reference to 'errno'
collect2: ld returned 1 exit status
请问这是为什么?
以上的步骤都是《边干边学——linux内核指导》第五章上的内容
在第160页
谢谢了:thank |
|