一  概念区分

提到linux系统调用,不得不区分几个比较容易混淆的概念:

系统调用:系统调用就是一种特殊的接口。通过这个接口,用户可以访问内核空间。系统调用规定了用户进程进入内核的具体位置。

应用程序接口(API,Application Programming Interface):是一些预定义的函数。API提供应用程序与开发人员基于某软件或硬件的以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。

c库:c库实现了linux的主要API,包括标准的C库函数和系统调用。同时linux的系统调用作为c库的一部分提供。

三者之间的关系:

二  实验举例:

使用库函数API和c代码中嵌入汇编代码两种方式实现两个相关的系统调用setuid和getuid

C代码如下:(先显示当前用户ID,修改用户ID后再显示)

root权限编译执行:

普通用户权限执行:

嵌入汇编的代码getuid_asm.c如下:

root权限执行:

普通用户权限:

三  分析总结

主要分析汇编代码中系统调用的工作过程,以上面汇编代码中的第二段汇编为例,刚开始对系统调用如何传递参数比较感兴趣,所以在使用系统调用getuid的基础上添加了setuid,看看是怎样传递参数的,c语言比较容易实现,但是看不到细节,而汇编可以。于是就开始了setuid的汇编实现,主要就是两点:传递系统调用号与用“int 0x80”触发系统调用,查表可知,setuid的系统调用号为23,即0x17。下面就是传递传递参数了,由于不清楚setuid的返回值是啥,没设置输出,仅设置了输入(参数),但是传递不进去,后来添加输出设置,还有就是参数传递是在触发系统调用前面还是后面(即 在int 0x80的前后)?经过实验,放在(int 0x80)后面,还是传递失败。放在int 0x80前面再加上输出设置,就可以传递进去了,表现为uid的值变成我预先设定的值。个人认为在触发系统调用前要求参数必须准备好。。。。有待深究。。。。

by:方龙伟

原创作品 转载请注明出处

《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000

linux内核学习之四 系统调用的更多相关文章

  1. linux内核学习之四:进程切换简述

    在讲述专业知识前,先讲讲我学习linux内核使用的入门书籍:<深入理解linux内核>第三版(英文原版叫<Understanding the Linux Kernel>),不过 ...

  2. linux内核学习之四:进程切换简述【转】

    转自:http://www.cnblogs.com/xiongyuanxiong/p/3531884.html 在讲述专业知识前,先讲讲我学习linux内核使用的入门书籍:<深入理解linux内 ...

  3. 关于Linux内核学习的误区以及相关书籍介绍

    http://www.hzlitai.com.cn/article/ARM9-article/system/1605.html 写给Linux内核新手-关于Linux内核学习的误区 先说句正经的:其实 ...

  4. Linux内核学习笔记-2.进程管理

    原创文章,转载请注明:Linux内核学习笔记-2.进程管理) By Lucio.Yang 部分内容来自:Linux Kernel Development(Third Edition),Robert L ...

  5. Linux内核学习笔记-1.简介和入门

    原创文章,转载请注明:Linux内核学习笔记-1.简介和入门 By Lucio.Yang 部分内容来自:Linux Kernel Development(Third Edition),Robert L ...

  6. Linux 内核学习经验总结

    Linux 内核学习经验总结 学习内核,每个人都有自己的学习方法,仁者见仁智者见智.以下是我在学习过程中总结出来的东西,对自身来说,我认为比较有效率,拿出来跟大家交流一下. 内核学习,一偏之见:疏漏难 ...

  7. Linux内核分析——Linux内核学习总结

    马悦+原创作品转载请注明出处+<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 Linux内核学习总结 一 ...

  8. Linux内核学习笔记二——进程

    Linux内核学习笔记二——进程   一 进程与线程 进程就是处于执行期的程序,包含了独立地址空间,多个执行线程等资源. 线程是进程中活动的对象,每个线程都拥有独立的程序计数器.进程栈和一组进程寄存器 ...

  9. Linux内核学习总结(final)

    Linux内核学习总结 符钰婧 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 ...

随机推荐

  1. linux启动流程及自定义gurb

    linux 启动流程 POST BIOS(boot sequence) 所选择的启动设备次序的MBR中是否有引导程序, ----> MBR(bootloader) 提供内核列表 -------& ...

  2. 不完全解决Android微信HTML5 播放视频的问题(不显示控制条,可交互)

    首先你需要知道以下内容: http://ad.weixin.qq.com/learn/2-3-3--%E9%80%9A%E7%94%A8%E5%BA%93 这是微信为广告商开放的API,我一直认为只有 ...

  3. 配置appium 1.6.3 for MAC

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "Helvetica Neue"; color: #454545 } 安装 ...

  4. SPSS数据分析—聚类分析

    多元分析的主要思想之一就是降维,我们已经讲过了很多降维的方法,例如因子分析.主成分分析,多维尺度分析等,还有一种重要的降维方法,就是聚类分析. 聚类分析实质上就是按照距离远近将数据分成若干个类别,使得 ...

  5. 十天精通CSS3学习笔记 part1

    http://www.imooc.com/learn/33 第1章 初识CSS3 什么是CSS3? CSS3是CSS2的升级版本,3只是版本号,它在CSS2.1的基础上增加了很多强大的新功能. 目前主 ...

  6. c#数据绑定(3)——数据转化为信息

    文/嶽永鹏 本文主要在数据绑定1和2中新增了DataSet对象,练习了如何在DataSet中添加表.关系和约束,同时本文也简要的介绍了如何将数据转化为信息. 目标界面: XAML代码: <Gri ...

  7. jquery实现搜索提示效果

    1.想要实现的效果如下:其实与百度地图的城市切换部分是一样的. 代码如下:其中的知识点包括($.inArray(test,array)>0   判断test是否在数组array中)($(&quo ...

  8. 深入浅出Mybatis系列(八)---mapper映射文件配置之select、resultMap

    上篇<深入浅出Mybatis系列(七)---mapper映射文件配置之insert.update.delete>介绍了insert.update.delete的用法,本篇将介绍select ...

  9. 【基本技能篇】>>第3篇《暗时间_指导学习的方法论——心得》

    暗时间——指导学习的方法论 ——2016年2月11日 打造自己的核心竞争力:①专业领域技能:②跨领域的技能(解决问题的能力,创新思维,判断与决策能力,表达沟通能力等等):③学习能力,持续学习和思考新知 ...

  10. dp 动态规划 hdu 1003 1087

    动态规划就是寻找最优解的过程 最重要的是找到关系式 hdu 1003 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1003 题目大意:求最大字序列和, ...