Linux第四次实验——谢飞帆
2016-03-20 17:09
253 查看
原创作品转载请注明出处 + 《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这三种方式运行得到的结果是一样的。
使用库函数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这三种方式运行得到的结果是一样的。
相关文章推荐
- Linux环境下使用GDB调试C程序
- Linux c 管道和有名管道(FIFO)
- Linux rsync 数据备份
- linux 常用命令
- linux及安全第四周总结
- linux删除文件之后,硬盘空间丢失如何处理
- 如何用 sysdig 监控和排查 Linux 服务器
- 《Linux内核设计与实现》Chapter 5 读书笔记
- linux vi命令大全
- Linux内核及分析 第四周 扒开系统调用的三层皮(上)
- Linux三剑客中的第二剑――Sed(文本编辑器)
- linux 重定向命令
- linux php imagick 安装
- Linux内核分析-两种方式使用同一个系统调用
- centos下 mysql 安装及配置(快速入门版)
- Linux下Java开发环境的搭建
- pointwise linux ubuntu 安装 纪录
- 阿里云-workerman 服务器环境配置
- linux内核分析作业4:使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用
- Linux文件删除原理