2021-2022-1 20212808 《Linux内核原理与分析》第五周作业

本文介绍了Linux系统调用的查找方法,如通过syscall_32.tbl找到getpid()的系统调用号,并展示了使用库函数API与C语言嵌入汇编调用同一系统调用的过程。此外,探讨了系统调用的三层机制,包括用户态、内核态和中断处理,并解析了API与系统调用的关系。
摘要由CSDN通过智能技术生成

遇到的问题:

关于系统调用函数号的问题,想使用getpid库函数,不知如何查找系统调用号。
可以进入目录LinuxKernel/linux-3.18.6/arch/x86/syscalls/
查看syscall_32.tbl,可以看到系统调用号
getpid()系统调用号为20,转化为十六进制即0x14。
还可以直接搜索linux 系统调用号表

实验四:使用库函数 API 和 C 代码中嵌入汇编代码两种方式使用同一个系统调用

  1. 使用库函数API获取进程识别码
    编写2808.c,只使用了getpid()库函数获取进程识别码,注意:实验楼虚拟机是64位,gcc编译时要加-m32才能输出32位机器码
#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
int main(void)
{
   
    int u_id;
    u_id=getpid();
    printf("u_id=%u\n",u_id);
    return 0;
}

运行结果如下:
在这里插入图片描述

  1. C语言代码中嵌入汇编代码

进入目录LinuxKernel/linux-3.18.6/arch/x86/syscalls/
查看syscall_32.tbl,可以看到系统调用号
getpid()系统调用号为20,十六进制即0x14

在这里插入图片描述

编写2808_asm.c文件:

 #inclu
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值