实验内容:使用库函数 API 和 C 代码中嵌入汇编代码两种方式使用同一个系统调用
一、使用库函数 API调用getuid
1.选择一个系统调用,系统调用列表参见 torvalds/linux。
进入/LinuxKernel/linux-3.18.6/arch/x86/syscalls目录,选择getuid函数
2.新建2820.c的文件,使用库函数API调用函数,代码如下
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
int main(int argc, char const *agrv[])
{
uid_t uid;
uid=getuid();
printf("The current user ID:%d\n",uid);
return 0;
}
3.执行2820.c文件,系统调用就是操作系统为用户态进程与硬件设备进行交互提供的一组接口。系统调用通过软中断向内核发出一个明确的请求,使用一个封装例程完成相应的功能,将结果返回给用户进程。
二、在c语言中嵌入汇编代码的方式实现系统调用getuid
1.把2820.c文件中的代码修改为汇编代码
代码如下:
#include <unistd.h>
#include <sys/types.h>
#include <stdio.h>
int main()
{
uid_t uid;
asm volatile(
"mov $0,%%ebx\n\t"
"mov $0x18,%%eax\n\t"
"int $0x80\n\t"
"mov %%eax,%0\n\t"
: "=m" (uid)
);
printf("The current user ID:%d\n",uid);
return 0;
}
2.执行结果如下