码迷,mamicode.com
首页 > 系统相关 > 详细

Linux第四次实验——谢飞帆

时间:2016-03-20 17:40:19      阅读:206      评论:0      收藏:0      [点我收藏+]

标签:

原创作品转载请注明出处 + 《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这三种方式运行得到的结果是一样的。

Linux第四次实验——谢飞帆

标签:

原文地址:http://www.cnblogs.com/20135126xff/p/5298973.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!