当前位置: 技术问答>linux和unix
系统调用小实验_新手求助
来源: 互联网 发布时间:2016-05-05
本文导语: 本来想实践一下系统调用实验,结果在gcc test.c时出现如下错误: /tmp/ccGMqetM.o(.text+0x35): In function 'main': : undefined reference to 'mysyscall' collect2: ld returned 1 exit status 请高手指点一下: (问题出在第5步以后) 平台: VMWAR...
本来想实践一下系统调用实验,结果在gcc test.c时出现如下错误:
/tmp/ccGMqetM.o(.text+0x35): In function 'main':
: undefined reference to 'mysyscall'
collect2: ld returned 1 exit status
请高手指点一下: (问题出在第5步以后)
平台:
VMWARE+redhat 9.0 (kernel 2.4.20-8 )
实验目的:
新建一个简单的系统调用函数mysyscall(), (没啥功能,就为了体验这个过程)
实验步骤如下:
(1) 添加系统调用号
在/include/asm-i386/unistd.h 和 /usr/include/asm/unistd.h 文件中添加如下内容:
....
#define __NR_mysyscall 259
(2)在系统调用表添加相应表项
/arch/i386/kernel/entry.S中,系统调用表后面一行处添加:
...
.long SYMBOL_NAME(sys_mysyscall)
(3) 实现系统调用服务例程
把sys_mysyscall 如下添加在 /kernel/sys.c 中
asmlinkage long sys_mysyscall(void)
{
current->uid=0;
}
(4) 重新编译内核
(5) 编写用户态程序
#include
//_syscall0(long,mysyscall)
int main()
{
printf("This is my uid: %d n",getuid());
//mysyscall();
syscall(__NR_mysyscall);
printf("Now, my uid is changed: %d n",getuid());
}
到这里,gcc test.c
就出现最开始说的问题了!
如果用//注释行的方法,则是下面的错误:
/tmp/......(.text+0x1c):In function 'mysyscall':
: undefined reference to 'errno'
collect2: ld returned 1 exit status
请高手帮忙解答一下是什么意思, 还有到底是哪里没对?
/tmp/ccGMqetM.o(.text+0x35): In function 'main':
: undefined reference to 'mysyscall'
collect2: ld returned 1 exit status
请高手指点一下: (问题出在第5步以后)
平台:
VMWARE+redhat 9.0 (kernel 2.4.20-8 )
实验目的:
新建一个简单的系统调用函数mysyscall(), (没啥功能,就为了体验这个过程)
实验步骤如下:
(1) 添加系统调用号
在/include/asm-i386/unistd.h 和 /usr/include/asm/unistd.h 文件中添加如下内容:
....
#define __NR_mysyscall 259
(2)在系统调用表添加相应表项
/arch/i386/kernel/entry.S中,系统调用表后面一行处添加:
...
.long SYMBOL_NAME(sys_mysyscall)
(3) 实现系统调用服务例程
把sys_mysyscall 如下添加在 /kernel/sys.c 中
asmlinkage long sys_mysyscall(void)
{
current->uid=0;
}
(4) 重新编译内核
(5) 编写用户态程序
#include
//_syscall0(long,mysyscall)
int main()
{
printf("This is my uid: %d n",getuid());
//mysyscall();
syscall(__NR_mysyscall);
printf("Now, my uid is changed: %d n",getuid());
}
到这里,gcc test.c
就出现最开始说的问题了!
如果用//注释行的方法,则是下面的错误:
/tmp/......(.text+0x1c):In function 'mysyscall':
: undefined reference to 'errno'
collect2: ld returned 1 exit status
请高手帮忙解答一下是什么意思, 还有到底是哪里没对?
|
main函数中的
syscall(__NR_mysyscall);
这个是干嘛的?
参考这里:
http://topic.csdn.net/u/20081027/22/BD1AD356-6886-4468-8103-A5CFBC6BF6DF.html
syscall(__NR_mysyscall);
这个是干嘛的?
参考这里:
http://topic.csdn.net/u/20081027/22/BD1AD356-6886-4468-8103-A5CFBC6BF6DF.html
|
#define __NR_mysyscall 259
把这个259改小点试试。
把这个259改小点试试。