Linux第四次实验——谢飞帆

原创作品转载请注明出处 + 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000

使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用,理解系统调用的工作机制。

本次实验选择24号和47号系统调用,分别获取当前用户uid(用户ID)和gid(组ID),即模拟Linux系统“id”命令。

编写两段代码,分别使用库函数API和C代码中嵌入汇编代码

uidgid.c(使用库函数API方式):

程序中通过调用getuid()和getgid()函数来获取当前执行用户uid和gid

内嵌汇编代码版本源码中将原来两行通过API函数获取uid和gid的代码注释掉,用汇编代码替换。

首先将ebx寄存器清零,表示无参数传入。

然后分别将0x18和0x2f(十进制24和47)赋值给eax寄存器,表示需要调用的系统调用号,24为getuid,47为getgid。

执行int 0x80来执行系统调用。

之后eax寄存器保存了返回值,将它分别赋值给输出uid或gid变量。

完成整个汇编代码的系统调用。

分别编译两个源码文件,分别执行系统id命令以及两个编译好的程序

上面的截图分别表示普通用户ubuntu和管理员用户root分别执行系统自带命令id,库函数API方式uidgid,内嵌汇编方式uidgid_asm这三种方式运行得到的结果是一样的。

时间: 2024-10-14 18:13:22

Linux第四次实验——谢飞帆的相关文章

Linux第7次实验——谢飞帆

原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 这一周的主要内容是可执行程序的装载. 一.那么首先来看一下编译链接的过程和ELF可执行文件格式 1.这张图简明扼要的说明了可执行程序的产生.? ?大概过程是这样的: ?.c文件汇编成汇编代码.asm, 然后再汇编成目标码.o, 然后链接成可执行文件a.out, 这时可执行文件就可以加载到内存中执行了. 2.举个例子(对hello wor

Linux第8次实验——谢飞帆

原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 1.理解进程上下文的切换机制,以及与中断上下文切换的关系 用户态进程它在用户的时候,它没法直接调用schedule(),因为schedule是个内核函数,而且它也不是一个系统调用,没法直接调用它,只能间接的调用它,间接的调用schedule()的时机就是中断处理过程 对于用户态进程,它要从当前运行中的进程切换出去的话,那么它就必须要进入

Linux第六次实验——谢飞帆

原创作品转载请注明出处+<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 在Linux中,task_struct其实就是通常所说的PCB.该结构定义位于: /include/linux/sched.h task_struct比较庞大,大致可以分为几个部分: 进程状态(State) 进程调度信息(Scheduling Information) 各种标识符(Identifiers) 进程通信有关信息(IPC:Inte

linux第四章实验报告

Linux第四章 用户和文件权限管理 实验环境 公司的linux主机即将提供给技术部作为开发服务器使用,根据部门内项目组的构成情况,首先需要建立相应的组账号.用户账号,并作为目录设置权限,还需要设置一个共用的数据存储目录,便于同事之间的数据交换. 需求描述 1.建立用户目录 创建目录/tech/benet和/tech/accp,分别用于存放各项目组中用户账号的宿主文件夹.例如,kylin用户的宿主目录应位于/tech/benet/kylin. 2.添加组账户 为两个项目组添加组账号benet,a

Linux第五次实验

北京电子科技学院(BESTI) 实     验    报     告 课程:信息安全系统设计基础                     班级: 201352 姓名:池彬宁 贺邦 学号:20135212 20135208 成绩:             指导教师:   娄嘉鹏  实验日期:2015.12.1 实验密级:         预习程度:             实验时间:15:30~18:20 仪器组次:          必修/选修:       必修          实验序号:4

LINUX第五次实验报告

北京电子科技学院(BESTI) 实     验    报     告 课程:信息安全系统设计基础                     班级: 201353 姓名:刘世鹏 郝爽 学号:20135304 20135335 成绩:             指导教师:   娄嘉鹏  实验日期:2015.12.1 实验密级:         预习程度:             实验时间:15:30~18:20 仪器组次:          必修/选修:       必修          实验序号:5

Linux下的ssh实验环境搭建与管理

Linux下的ssh实验环境搭建与管理 实验环境 服务端:xuegod-63   IP:192.168.1.63 客户端:xuegod-64   IP:192.168.1.64 客户端普通用户:ceshi  密码:123456 安装好扫描软件rpm -ivh /mnt/Packages/nmap-5.21-4.el6.x86_64.rpm 实验目标 1:SSHD服务介绍 2:SSHD服务安装配置 3:两Linux服务器之间数据拷贝 4:SSHD服务作用: 实验步骤 1:搭建环境 1):网桥模式

数据结构与算法 第四次实验报告 图

数据结构与算法 第四次实验报告 姓名:许恺 学号:2014011329 班级:计算机14-1     中国石油大学(北京)计算机科学与技术系 1.图的定义,文件为"Graph.h" #ifndef GRAPH_H//定义头文件 #define GRAPH_H #include<string>//引入标准库中的头文件 using namespace std; const int MaxSize=12; struct ArcNode//定义边表结点 { int adjvex;/

Linux中四种进程或线程同步互斥控制方法

原文地址:http://blog.itpub.net/10697500/viewspace-612045/ 一.Linux中 四种进程或线程同步互斥的控制方法: 1.临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问. 2.互斥量:为协调共同对一个共享资源的单独访问而设计的. 3.信号量:为控制一个具有有限数量用户资源而设计. 4.事 件:用来通知线程有一些事件已发生,从而启动后继任务的开始. 二.临界区(Critical Section) 保证在某一时刻只有一个线程