2023-2024-1 20232831《Linux内核原理与分析》第五周作业



1、阅读学习教材「庖丁解牛Linux 分析 」第5章,有问题优先使用chatgpt等AI工具。
2、教材深入学习关注豆列「Linux内核及安全」。
3、学习蓝墨云班课中第五周视频「扒开系统调用的三层皮?(上)」,并完成实验楼上配套实验四。

一、扒开系统调用的三层皮(上)

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

二、实验过程

1.直接调用库函数API

首先,进入github的torvalds/linux页面进行syscall_32.tbl文件的查看。该文件即是系统调用列表文件,包含了一系列的定义,例如系统调用的编号、名称、参数列表和实现方法等等内容。在本实验,选择了getpid和getppid系统调用来实现直接调用库函数API。
在这里插入图片描述
在这里插入图片描述
getpid用于获取调用进程的进程标识号(Process ID,PID),而getppid用于获取调用进程的父进程的进程标识号(Parent Process ID,PPID)。getpid可以帮助进程识别自己的PID,以便执行特定的操作,如进程间通信、文件操作;而getppid允许进程了解其父进程的PID,这对于进程关系和进程间通信非常有用。
接下来直接编写一个C语言程序,直接调用getpid和getppid系统调用函数。代码如下所示:

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main(){
        pid_t pid=getpid();
        pid_t ppid=getppid();
        printf("pid=%d  ppid=%d\n",pid,ppid);
}

运行结果如下:

在这里插入图片描述

在这里插入图片描述

2.使用C代码中嵌入汇编代码

下面将进行C语言中使用asm volatile内嵌汇编代码来进行调用系统函数。根据上图的syscall_32.tbl文件可知,getpid和getppid的系统调用函数ID分别是20和64,对应十六进制数分别为0x14和0x40。因此可以进行代码修改,新建立一个C文件。
代码如下:

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>

int main() {
    pid_t pid, ppid;

    // 获取当前进程的PID(使用getpid)
    asm volatile("mov $0x14, %%eax\n\t"  // getpid 的ID为20
                 "int $0x80\n\t"
                 "mov %%eax, %0\n\t"
                 : "=r" (pid) :: "%eax");

    // 获取当前进程的父进程的PID(使用getppid)
    asm volatile("mov $0x40, %%eax\n\t"  // getppid 的ID为64
                 "int $0x80\n\t"
                 "mov %%eax, %0\n\t"
                 : "=r" (ppid) :: "%eax");

    printf("pid=%d  ppid=%d\n", pid, ppid);

    return 0;
}

在这里插入图片描述

同时运行2种方式的系统函数调用,发现结果类似,都得出了正确答案。

在这里插入图片描述


三、Chatgpt帮助

通过Chatgpt更深层次了解了getpid和getppid两个系统调用函数。
在这里插入图片描述
在这里插入图片描述

总结

本次实验通过两种方法——使用库函数 API 和内嵌汇编代码两种方法获取了进程的PID和父进程的PID(ppid)。库函数 API方法使用标准C库函数来调用系统调用,因为它封装了底层系统调用的细节,所以调用更加简单和高级。内嵌汇编方法通过内嵌汇编代码来手动执行系统调用,它通过程序员自行编写汇编代码,提供了对CPU指令的细粒度控制,更加复杂、困难一些。但两种方法都实现了相同的目标。

对系统调用的理解:系统调用是用户空间程序与操作系统内核之间的接口,允许用户程序请求内核执行特权操作,如文件操作、进程管理和网络通信。通过这次实验,让我加深了对系统函数调用的印象,它是用户程序与操作系统内核之间的通信桥梁。

20232831袁思承
关注 关注
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
2023-2024-1 20232828《Linux内核原理分析第五作业
yy__yy123的博客
10-19 84
getpid用于获取当前进程的进程号。pid_t zlrx;return 0;首先vim输入以下代码,然后进行编译编译成功后运行pid_t zlrx;return 0;完成本次实验,查找了部分资料,学习到了Linux 系统调用是用户程序与操作系统内核之间进行交互的接口,它允许用户程序请求操作系统提供的服务和功能。用户程序发起系统调用:当用户程序需要执行某些特权操作或者使用操作系统提供的功能时,它会通过特定的语法形式(通常是函数调用)发起系统调用请求。
2023-2024-1 20232828《Linux内核原理分析》第二作业
yy__yy123的博客
09-23 55
​阅读学习教材「庖丁解牛Linux 分析 」第1,2章,有问题优先使用chatgpt等AI工具。或者到蓝墨云班课中提问,24小时内回复,鼓励解答别人问题,提问前请阅读「如何提问」。教材深入学习关注豆列「Linux内核及安全」。学习蓝墨云班课中第二视频「计算机是如何工作的?」,并完成实验楼上配套实验一,基于树莓派或其他平台完成ARM相关内容。在本日晚12:00前发学习博客(标题 学号《Linux内核原理分析》第二作业),重点是遇到的问题和解决方案。不按时交作业会扣分。 完成蓝墨云班课中的测试。​​​​
2023-2024-1 20232831Linux内核原理分析》第四作业
qq_53198713的博客
10-12 99
1.阅读学习教材「庖丁解牛Linux 分析 」第4章2.教材深入学习关注豆列「Linux内核及安全」。3.学习蓝墨云班课中第四视频「构造一个简单的Linux系统MenuOS?」,并完成实验楼上配套实验三。
2023-2024-1 20232831Linux内核原理分析》第七作业
qq_53198713的博客
11-03 66
通过本次实验,进一步了解了Linux 内核创建一个新进程的过程,即fork系统调用函数的运行过程,懂得了为什么会出现”一次调用,两次运行“的情况,从而对Linux内核有了新的理解。
2023-2024-1 20232817《Linux内核原理分析第五作业
Elonli678的博客
11-15 82
故此,使用他人编译好的工具链,是一种有效的方式。网站提供了已经编译好的RISC-V工具链,如下图所示:选项:在Select arch选项中,我们选择riscv64-lp64d在Select libc中选择glibc下载stable版或者Bleeding-edge本节以下载Bleeding-edge为例。
2023-2024-1 20232804《Linux内核原理分析第五作业
JORDANCHAN8881的博客
10-22 49
本次实验,在C语言的环境下,使用库函数和内嵌汇编代码两种不同方式触发同一系统调用的。
2023-2024-1 20232809《Linux内核原理分析第五作业
Stir_fry_CPU的博客
10-22 44
1、使用mov $39, %%rax将系统调用号39(getpid)加载到rax寄存器中。3、输出值(pid)通过"=a"表示,rax寄存器的值被存储在pid变量中。4、使用: "rcx", "r11"指示内联汇编,修改这两个寄存器的内容。2、使用syscall触发系统调用。5、打印获取到的进程ID。
2023-2024-1 20232819《Linux内核原理分析第五作业
qq_67687879的博客
10-22 35
系统调用机制是指用户空间程序通过软中断(软件中断)或陷阱指令(例如int 0x80)触发系统调用。当中断或陷阱指令发生时,处理器将控制权转移到内核态。内核根据系统调用号确定用户请求的具体操作,并进行相应的处理。内核执行请求的操作,并将结果返回给用户空间程序。用户空间程序继续执行,恢复到用户态。
2023-2024-1 20232812《Linux内核原理分析第五作业
2301_79752363的博客
10-19 70
mkdir函数简要介绍头文件库:函数原型: int mkdir(const char *pathname, mode_t mode);函数说明:mkdir()函数以mode方式创建一个以参数pathname命名的目录,mode定义新创建目录的权限。返回值:若目录创建成功,则返回0;否则返回-1,并将错误记录到全局变量errno中。
边干边学Linux__第二版_doc格式
03-18
第5章 文件管理工具 5.1 正则表达式 5.2 排序文件 5.3 查找文件 5.4 搜索文件内容 5.5 命令记录 5.6 压缩文件、解压缩文件与打包文件 5.7 RPM包管理 第6章 Linux进程、管道和重定向 6.1 进程的属性 6.2 进程的终止 ...
入门学习Linux常用必会60个命令实例详解doc/txt
06-09
hda1中的“1”代表hda的第一个硬盘分区 (partition),hda2代表hda的第二主分区,第一个逻辑分区从hda5开始,依此类推。此外,可以直接检查 /var/log/messages文件,在该文件中可以找到计算机开机后系统已辨认出来的...
LINUX系统管理白皮书
09-18
第5章 TCP/IP网络配置 36 5.1 proc文件系统的设置 36 5.2 二进制文件的安装 37 5.3 另一个例子 37 5.4 设置主机名 37 5.5 分配IP地址 37 5.6 编写主机和网络文件 39 5.7 IP接口配置 40 5.7.1 回送接口 40 ...
linux 之dma_buf (4)- mmap
最新发布
z20230508的博客
05-28 771
前面几篇都是在 kernel space 对 dma-buf 进行访问的,本篇我们将一起来学习,如何在 user space 访问 dma-buf。当然,user space 访问 dma-buf 也属于 CPU Access 的一种。
Linux signal】
“Struggle”的博客
05-22 1033
信号集(signal set)是指一个能够包含多个信号的数据类型,它用于表示一组信号。信号集通常用于信号掩码(signal mask)和信号处理的相关操作中。进程可以使用信号集来指定它希望阻塞的信号(sigprocmask)、它希望等待的信号(sigwait或sigtimedwait),或者它想要处理的信号(sigpending)。在Linux中,信号集通过sigset_t类型来表示,这是一个能够包含所有信号的数据类型。函数作用初始化一个信号集,使其不包含任何信号。sigfillset。
linux内部pthread_create函数创建设置栈大小方法
$好记性还是要多记录$
05-22 232
linux 创建线程设置栈大小
linux父进程fork出子进程后,子进程为何首先需要close文件描述符。
tusong86的博客
05-21 265
考虑到一种情况,父进程创建了tcp服务端套接字,并且listen,此时fork出子进程,若子进程里面不close此监听套接字,则子进程里面是否能接收到客户端的连接。答案是可以的,现在构造一个服务端程序,listen后,fork出子进程,然后父进程进入sleep,子进程调用accept,在accept成功后,打印对应的信息。在linux c/c++编程时,父进程fork出子进程后,子进程经常第一件事就是close掉所有的文件描述符;所以后续父进程fork出子进程后,子进程需要关闭对应的文件描述符。
Linux echo命令(在终端输出文本)
Dontla的博客
05-22 681
echo是Linux和Unix系统中常用的一个命令行工具,主要用于在终端输出文本。该命令非常简单,但是它在脚本编程和日常系统管理中扮演着重要的角色。
linux-headers-5.15.0-72-generic 这个版本的linux内核头文件应该用什么
05-27
如果你正在运行的是 Linux 内核版本为 5.15.0-72-generic 的系统,那么你需要安装对应版本的 Linux 内核头文件才能编译内核模块或驱动程序。你可以使用以下命令来安装适用于该版本内核的头文件: ``` sudo apt-get ...

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • 内核编译与系统调用 1322
  • 使用 exec*库函数、编程练习动态链接库的两种使用方式 1226
  • visual studio下静态链接库的制作、动态链接库的制作 1220
  • 20232831 2023-2024-2 《网络攻防实践》第4次作业 1109
  • Vim or VSCode、gcc测试、gdb测试、静态库的测试、共享库的测试 1107

最新评论

  • 20232831 袁思承 2023-2024-2 《网络攻防实践》第7次作业

    普通网友: 写的很好,细节很到位!【我也写了一些相关领域的文章,希望能够得到博主的指导,共同进步!】

  • 20232831 袁思承 2023-2024-2 《网络攻防实践》第7次作业

    普通网友: 文章内容通俗易懂,适合不同层次的读者。【我也写了一些相关领域的文章,希望能够得到博主的指导,共同进步!】

  • 20232831袁思承2023-2024-2 《网络攻防实践》第6次作业

    普通网友: 干货满满,细节很到位!【我也写了一些相关领域的文章,希望能够得到博主的指导,共同进步!】

  • visual studio下静态链接库的制作、动态链接库的制作

    全栈小5: 表情包欢迎学习交流

  • visual studio下静态链接库的制作、动态链接库的制作

    20232831袁思承: 表情包

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • 20232831 袁思承 2023-2024-2 《网络攻防实践》第10次作业
  • 20232831 袁思承 2023-2024-2 《网络攻防实践》第9次作业
  • 20232831 袁思承2023-2024-2 《网络攻防实践》第8次作业
2024年9篇
2023年23篇

目录

目录

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

深圳SEO优化公司乌海网站推广方案哪家好甘孜高端网站设计哪家好苏州网站优化按天扣费公司荆州百度爱采购公司温州模板制作报价南联百度关键词包年推广楚雄企业网站改版阳江关键词按天收费哪家好晋中网络广告推广哪家好安庆网站设计模板报价临猗网站搭建抚顺网站改版报价铜川推广网站哪家好张家口百姓网标王多少钱淄博百度关键词包年推广报价石岩阿里店铺运营价格湛江网站开发朝阳品牌网站设计哪家好绥化网站改版多少钱衢州企业网站制作价格福田建网站价格思茅网站优化按天扣费多少钱武威如何制作网站哪家好青岛模板网站建设价格宝安百姓网标王公司呼和浩特百度竞价包年推广多少钱雅安网页制作报价遂宁网站推广方案报价连云港网站关键词优化西安SEO按天计费哪家好歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化