操作系统分析所需的相关基础知识 Foundations For Hacking Linux based on X86/Linux 孟宁 电话: 0512-68839303 : 主页:

Slides:



Advertisements
Similar presentations
一、统计范围 注册地在湖里区的具有房地产开发资质的 房地产开发企业 无论目前是否有开发项目 无论开发的项目是在湖里区还是在其他区 没有开发项目的企业需要报送年报和月报 中的资金表(空表)。 新成立的项目公司,要先入库,再报报表。
Advertisements

第十二章 常微分方程 返回. 一、主要内容 基本概念 一阶方程 类 型 1. 直接积分法 2. 可分离变量 3. 齐次方程 4. 可化为齐次 方程 5. 全微分方程 6. 线性方程 类 型 1. 直接积分法 2. 可分离变量 3. 齐次方程 4. 可化为齐次 方程 5. 全微分方程 6. 线性方程.
概率统计( ZYH ) 节目录 3.1 二维随机变量的概率分布 3.2 边缘分布 3.4 随机变量的独立性 第三章 随机向量及其分布 3.3 条件分布.
数控机床结构及维修 主编:于万成 王桂莲 副主编:李昊 人民邮电出版社 北京 ◎ 了解数控系统的组成和常见数控系统 的特点 ◎ 熟悉常见数控系统的参数设置 ◎ 掌握数控系统的常见故障诊断及维修 方法 调试与维修数控 机床的数控系统.
第 12 章位运算 C 语言兼具高级语言及低级语言的特性,因此 适合编写系统软件。 C 语言具备低级语言的特性 就在于它能直接对硬件进行操作,即位运算。 所谓位运算是指,按二进制位进行的运算。 例如,将一个存储单元中各二进位左移或右移一 位等。
计算机 在分析化学的应用 ( 简介 ) 陈辉宏. 一. 概述 信息时代的来临, 各门学科的研究方法都 有了新的发展. 计算机的介入, 为分析化学的进展提供了 一种更方便的研究方法.
编译程序 构造原理和实现技术 授课教师:吕江花. 第一章 编译程序概述 主要内容: 几个基本概念 编译器的工作过程概述 编译器各个阶段的功能描述 编译程序的实现途径.
嵌入式操作系统 陈香兰 Fall 系统调用 10/27/09 嵌入式 OS 3/12 系统调用的意义  操作系统为用户态进程与硬件设备进行交互提供 了一组接口 —— 系统调用  把用户从底层的硬件编程中解放出来  极大的提高了系统的安全性  使用户程序具有可移植性.
系统调用 Embedded Operating Systems2 系统调用的意义 操作系统为用户态进程与硬件设备进行交互提 供了一组接口 —— 系统调用 把用户从底层的硬件编程中解放出来 极大的提高了系统的安全性 使用户程序具有可移植性.
第 2 章 数据流分析 内容概述 数据流分析推导的是数据沿着程序执行路 径流动的信息 – 过程内的分析:可用表达式分析、到达-定值分 析等 – 过程间分析 –Shape 分析 – 理论基础 – 数据流方程的求解.
吉林大学远程教育课件 主讲人 : 杨凤杰学 时: 64 ( 第六十二讲 ) 离散数学. 最后,我们构造能识别 A 的 Kleene 闭包 A* 的自动机 M A* =(S A* , I , f A* , s A* , F A* ) , 令 S A* 包括所有的 S A 的状态以及一个 附加的状态 s.
分析化学与无机化学中溶液 pH 值计算的异同比较 谢永生  分析化学是大学化学系的一门基础课,课 时较少,其内容主要是无机物的化学分析。 分析化学是以无机化学作为基础的,我们 都是在已掌握一定的无机化学知识后才学 习分析化学 。所以在分析 化学的学习中会 重复许多无机化学内容,造成学习没有兴.
1 为了更好的揭示随机现象的规律性并 利用数学工具描述其规律, 有必要引入随 机变量来描述随机试验的不同结果 例 电话总机某段时间内接到的电话次数, 可用一个变量 X 来描述 例 检测一件产品可能出现的两个结果, 也可以用一个变量来描述 第五章 随机变量及其分布函数.
计算机文化基础 第 13 章 多表操作. 多表操作 以前所进行的操作中,在同一时刻只能打开一个表文 件,这是单工作区操作。但是在有些情况下,我们需要同时 了解多个表文件中的内容,例如 图 8-1 。在表文件 Stud1.DBF 中,有姓名,班级,电话三项;在 Stud2.DBF 中, 有姓名,性别,籍贯,英语四个字段。在单工作区操作方式.
主讲教师:陈殿友 总课时: 124 第八讲 函数的极限. 第一章 机动 目录 上页 下页 返回 结束 § 3 函数的极限 在上一节我们学习数列的极限,数列 {x n } 可看作自变量 为 n 的函数: x n =f(n),n ∈ N +, 所以,数列 {x n } 的极限为 a, 就是 当自变量 n.
嵌入式操作系统 陈香兰 Spring 2007 中国科学技术大学计算机系.
嵌入式操作系统 陈香兰 Spring 2006 中国科学技术大学计算机系.
线性代数习题课 吉林大学 术洪亮 第一讲 行 列 式 前面我们已经学习了关 于行列式的概念和一些基本 理论,其主要内容可概括为:
吉林大学远程教育课件 主讲人 : 杨凤杰学 时: 64 ( 第二十五讲 ) 离散数学. 定理 群定义中的条件 ( 1 )和( 2 )可以减弱如下: ( 1 ) ’ G 中有一个元素左壹适合 1 · a=a; ( 2 ) ’ 对于任意 a ,有一个元素左逆 a -1 适 合 a -1 ·
Linux 操作系统分析 主讲:陈香兰 助教:贾永泉、毛熠璐 (西区电三 421 ) Autumn 2007.
内存寻址 Embedded Operating Systems2 在 intelx86 处理器下,有三种不同的地址 逻辑地址:每个逻辑地址由一个段 (segment) 和偏 移量 (offset) 组成 线性地址: 32 位无符号整数,可以表示 4G 的地址 空间.
第二章 随机变量及其分布 第一节 随机变量及其分布函数 一、随机变量 用数量来表示试验的基本事件 定义 1 设试验 的基本空间为 , ,如果对试验 的每一个基 本事件 ,规定一个实数记作 与之对应,这样就得到一个定义在基本空 间 上的一个单值实函数 ,称变量 为随机变量. 随机变量常用字母 、 、 等表示.或用.
第 4 章 过程与变量的作用范围. 4.1 Visual Basic 的代码模块 Visual Basic 的应用程序是由过程组成的, 过程代码存放在模块中。 Visual Basic 提供了 三类模块,它们是窗体模块、标准模块和类 模块。 窗体模块 窗体模块是大多数 Visual Basic.
数 学 系 University of Science and Technology of China DEPARTMENT OF MATHEMATICS 第 3 章 曲线拟合的最小二乘法 给出一组离散点,确定一个函数逼近原函数,插值是这样的一种手段。 在实际中,数据不可避免的会有误差,插值函数会将这些误差也包括在内。
实验三: 用双线性变换法设计 IIR 数字滤波器 一、实验目的 1 熟悉用双线性变换法设计 IIR 数字滤波器的原理与方法。 2 掌握数字滤波器的计算机仿真方法。 3 通过观察对实际心电图信号的滤波作用, 获得数字滤波的感性知 识。
外文文献检索示例. 实验目的: 掌握利用计算机网络检索外文文献的基本方法; 了解熟悉下列数据库的结构、内容并掌握其检索方 法 ; 掌握检索的主要途径:出版物( Publication )、关键 词( Keyword )、作者( Author )等。
OS 进程调度模拟演示 制作人: 钱晶 高上上. OS 进程调度模拟-实验原理 静态优先级原理 在这种方式下,系统一旦把处理机分配给就绪队 列中的优先权最高的进程后,该进程便一直执行下去, 直至完成。或因为发生某事件使该进程放弃处理机,系 统方可再将处理机分配给另一优先级最高的进程。这些 事件包括有优先级更高的进程进入,或是因为某些原因.
信息利用与学术论文写作 Library of Jiangsu University, Zhenjiang Sha Zhenjiang
内存寻址 Embedded Operating Systems2 在 intelx86 处理器下,有三种不同的地址 逻辑地址:每个逻辑地址由一个段 (segment) 和偏 移量 (offset) 组成 线性地址: 32 位无符号整数,可以表示 4G 的地址.
主讲教师:陈殿友 总课时: 124 第十一讲 极限的运算法则. 第一章 二、 极限的四则运算法则 三、 复合函数的极限运算法则 一 、无穷小运算法则 机动 目录 上页 下页 返回 结束 §5 极限运算法则.
在发明中学习 线性代数 概念的引入 李尚志 中国科学技术大学. 随风潜入夜 : 知识的引入 之一、线性方程组的解法 加减消去法  方程的线性组合  原方程组的解是新方程的解 是否有 “ 增根 ” ?  互为线性组合 : 等价变形  初等变换  高斯消去法.
Photoshop CS4 标准培训教程 第三章第三章 在 Photoshop CS4 中所谓的不规则选区指的是随意性强,不被局限在几何形状内, 他们可以是鼠标任意创建的也可以是通过计算而得到的单个选区或多个选区。在 Photoshop 中可以用来创建不规则选区的工具被分组放置到套索工具组、魔棒工具组.
1 学籍归档工作 年学籍归档工作安排 从 2008 年开始,改为按届移交档案 从 2008 年开始,改为按届移交档案 今年的归档工作范围: 今年的归档工作范围: 2014 年应届毕业班级 2014 年应届毕业班级 2014 年办理毕业证的往届生。 2014 年办理毕业证的往届生。 整理内容:根据.
第一节 相图基本知识 1 三元相图的主要特点 (1)是立体图形,主要由曲面构成; (2)可发生四相平衡转变; (3)一、二、三相区为一空间。
9的乘法口诀 1 .把口诀说完全。 二八( ) 四六( ) 五八( ) 六八( ) 三七( ) 三八( ) 六七( ) 五七( ) 五六( ) 十六 四十八 四十二 二十四 二十一 三十五 四十 二十四 三十 2 .口算, 并说出用的是哪句口诀。 8×8= 4×6= 7×5= 6×8= 5×8=
湖南省赛宝软件服务有限公司 信息报送及申报系统演示 湖南省赛宝软件服务有限公司 李纠.
第二章 处理器管理 南通大学电子信息学院 2010 年 9 月. 第二章 处理器管理 2.1 中央处理器 2.2 中断技术 2.3 进程及其实现 2.4 线程及其实现 2.5 Linux 进程和线程 2.6 Windows 2003 进程和线程 2.7 处理器调度 2.8 作业的管理与调度 2.9.
吉林大学远程教育课件 主讲人 : 杨凤杰学 时: 64 ( 第五十三讲 ) 离散数学. 定义 设 G= ( V , T , S , P ) 是一个语法结构,由 G 产生的语言 (或者说 G 的语言)是由初始状态 S 演绎出来的所有终止符的集合, 记为 L ( G ) ={w  T *
平行线的平行公理与判定 九年制义务教育七年级几何 制作者:赵宁睿. 平行线的平行公理与判定 要点回顾 课堂练习 例题解析 课业小结 平行公理 平行判定.
Relevance Theory Lecture 12. Relevance Theory 交际研究的对象是交际的概念、内容、 性质、功能、方法和交际行为、交际参 加者之间的关系等的认识和阐述。 20 世 纪 70 年代末以来, Sperber & Wilson 把认 知与交际结合起来,于 1986.
编译原理总结. 基本概念  编译器 、解释器  编译过程 、各过程的功能  编译器在程序执行过程中的作用  编译器的实现途径.
周期信号的傅里叶变换. 典型非周期信号 ( 如指数信号, 矩形信号等 ) 都是满足绝对可 积(或绝对可和)条件的能量信号,其傅里叶变换都存在, 但绝对可积(或绝对可和)条件仅是充分条件, 而不是必 要条件。引入了广义函数的概念,在允许傅里叶变换采用 冲激函数的前提下, 使许多并不满足绝对可积条件的功率.
陈香兰 助教:毛熠璐、吴昊 Spring 2008 嵌入式操作系统 陈香兰 助教:毛熠璐、吴昊 Spring 2008.
 符号表  标识符的作用: 声明部分:定义了各种对象及对应的属性和 使用规则。 程序体:对所定义的对象进行各种操作。 $ididname IdnameAttributeIR  必要性 Token : 新表-符号表(种类、类型等信息):
习题课( 1 ) 进程管理及调度. 复习 进程概念、描述及状态 进程概念、描述及状态 进程的同步与互斥及应用 进程的同步与互斥及应用 管程机制 管程机制 进程通信 进程通信 进程调度算法 进程调度算法 进程死锁 进程死锁 线程 线程.
Department of Mathematics 第二章 解析函数 第一节 解析函数的概念 与 C-R 条件 第二节 初等解析函数 第三节 初等多值函数.
1 第 7 章 存储过程、触发器和程序包 在很多时候,都需要保存 PL/SQL 程序块,以便 随后可以重新使用。这也意味着,程序块需要一个名 称,这样需才可以调用或者引用它。命名的 PL/SQL 程序块可被独立编译并存储在数据库中,任何与数据 库相连接的应用程序都可以访问这些存储的 PL/SQL 程序块。
网上预约集港操作指南 一、登录系统 登陆下面图片显示网址:输入堆场用户名、密码和校验码登陆系统.
首 页 首 页 上一页 下一页 本讲内容本讲内容 视图,剖视图(Ⅰ) 复习: P107 ~ P115 作业: P48(6-2,6-4), P49( 去 6-6) P50, P51(6-13), P52 P50, P51(6-13), P52 P53 (6-18,6-20) P53 (6-18,6-20)
1-4 节习题课 山东省淄博第一中学 物理组 阚方海. 2 、位移公式: 1 、速度公式: v = v 0 +at 匀变速直线运动规律: 4 、平均速度: 匀变速直线运动 矢量式 要规定正方向 统一单位 五个量知道了三 个量,就能求出 其余两个量 3 、位移与速度关系:
《 UML 分析与设计》 交互概述图 授课人:唐一韬. 知 识 图 谱知 识 图 谱知 识 图 谱知 识 图 谱.
LOGO s 数控机床故障诊断与维修. 子项目 8 掌握 M 、 T 代码的工作原理并进行控制 冷却、转速、刀库等 。 任务 8.3 编制斗笠式刀库换刀 PLC 程序,排除故障.
1 、如果 x + 5 > 4 ,那么两边都 可得 x >- 1 2 、在- 3y >- 4 的两边都乘以 7 可得 3 、在不等式 — x≤5 的两边都乘以- 1 可得 4 、将- 7x — 6 < 8 移项可得 。 5 、将 5 + a >- 2 a 移项可得 。 6 、将- 8x < 0.
名探柯南在侦查一个特大盗窃集团过程 中,获得藏有宝物的密码箱,密码究竟 是什么呢?请看信息: ABCDEF( 每个字 母表示一个数字 ) A :是所有自然数的因数 B :既有因数 5 ,又是 5 的倍数 C :既是偶数又是质数 D :既是奇数又是合数 EF :是 2 、 3 、 5 的最小公倍数.
项目七: PLC 功能指令应用 带进位循环左移指令 XXXXX. 项目七: PLC 功能指令应用 FX2 系列可编程控制器移位控制指令有移位、循环移位、字移位 及先进先出 FIFO 指令等 10 条指令。 带进位循环右移指令 RCR 带进位循环左移指令 RCL 字右移位指令 WSFR 先入先出读出指令.
请同学们仔细观察下列两幅图有什么共同特点? 如果两个图形不仅形状相同,而且每组对应点所在的直线 都经过同一点, 那么这样的两个图形叫做位似图形, 这个点叫做位 似中心.
超星数字图书馆 一、页面的使用 进入数字图书馆网页 下载超星阅读器 查找图书.
表单自定义 “ 表单自定义 ” 功能是用于制作表单的 工具,用数飞 OA 提供的表单自定义 功能能够快速制作出内容丰富、格 式规范、美观的表单。
力的合成 力的合成 一、力的合成 二、力的平行四边形 上一页下一页 目 录 退 出. 一、力的合成 O. O. 1. 合力与分力 我们常常用 一个力来代替几个力。如果这个 力单独作用在物体上的效果与原 来几个力共同作用在物体上的效 果完全一样,那么,这一个力就 叫做那几个力的合力,而那几个 力就是这个力的分力。
8.1 二元一次方程组. 篮球联赛中,每场比赛都要分出胜负,每队 胜一场得 2 分,负一场得 1 分. 如果某队为了争取 较好名次,想在全部 22 场比赛中得 40 分,那么这 个队胜负场数应分别是多少 ? 引 言引 言 用学过的一元一次方 程能解决此问题吗? 这可是两个 未知数呀?
逻辑设计基础 1 第 7 章 多级与(或)非门电路 逻辑设计基础 多级门电路.
开放教育学员入学须知 第一部分:浏览山东理工大学远程与继续 教育学院网站浏览山东理工大学远程与继续 教育学院网站 第二部分:浏览中央电大教学平台浏览中央电大教学平台 第三部分:浏览山东电大教学平台浏览山东电大教学平台 第四部分:浏览淄博电大教学平台浏览淄博电大教学平台 第五部分:淄博电大教学平台使用淄博电大教学平台使用.
张勤 人大报刊复印资料 专题全文数据库 简 介简 介 《人大报刊资料全文数据库》是中国人民大 学书报资料中心与北京博利群电子信息有限 公司联合开发研制的大型数据库光盘。它涵 盖面广、信息量大、分类科学、筛选严谨、 结构合理,是国内最具权威的社会科学、人.
人 有 悲 欢 离 合, 月有阴晴圆缺。月有阴晴圆缺。 华师大版七年级数学第二册 海口市第十中学 数学组 吴锐.
1 第三章 数列 数列的概念 考点 搜索 ●数列的概念 ●数列通项公式的求解方法 ●用函数的观点理解数列 高考 猜想 以递推数列、新情境下的 数列为载体, 重点考查数列的通 项及性质, 是近年来高考的热点, 也是考题难点之所在.
第二节. 广告牌为什么会被风吹倒? 结构的稳定性: 指结构在负载的作用下 维持其原有平衡状态的能力。 它是结构的重要性质之一。
§9. 恒定电流场 第一章 静电场 恒定电流场. 电流强度  电流:电荷的定向移动  正负电荷反方向运动产生的电磁效应相同 ( 霍尔效应 特例 ) 规定正电荷流动的方向为正方向  电流方向:正方向、反方向  电流强度 ( 电流 ) A 安培 标量 单位时间通过某一截面的电荷.
目录 上页 下页 返回 结束 二、无界函数反常积分的审敛法 * 第五节 反常积分 无穷限的反常积分 无界函数的反常积分 一、无穷限反常积分的审敛法 反常积分的审敛法  函数 第五章 第五章.
SCI 数据库检索练习参考 本练习完全依照 SCI 数据库实际检索过程而 实现。 本练习完全依照 SCI 数据库实际检索过程而 实现。 练习中,选择了可以举一反三的题目,读 者可以根据题目进行另外的检索练习,如: 可将 “ 与 ” 运算检索改为 “ 或 ” 、 “ 非 ” 运算检索 等等。 练习中,选择了可以举一反三的题目,读.
§7.2 估计量的评价标准 上一节我们看到,对于总体 X 的同一个 未知参数,由于采用的估计方法不同,可 能会产生多个不同的估计量.这就提出一 个问题,当总体的一个参数存在不同的估 计量时,究竟采用哪一个好呢?或者说怎 样评价一个估计量的统计性能呢?下面给 出几个常用的评价准则. 一.无偏性.
Presentation transcript:

操作系统分析所需的相关基础知识 Foundations For Hacking Linux based on X86/Linux 孟宁 电话: : 主页: 地址:苏州工业园区独墅湖高等教育区仁爱路 188 号思贤楼 504 室 2013 年 5 月

Agenda ♦C 语言函数调用堆栈框架 ♦C 代码中嵌入汇编代码 ♦ 函数指针与回调函数 ♦ 用户态和内核态 ♦ 保护现场和恢复现场 ♦ 虚拟内存 ♦ 进程的地址空间

堆栈 ♦ 堆栈是 C 语言程序运行时必须的一个记录调用路径和参数 的空间 – 函数调用框架 – 传递参数 – 保存返回地址 – 提供局部变量空间 – 等等 ♦C 语言编译器对堆栈的使用有一套的规则 ♦ 了解堆栈存在的目的和编译器对堆栈使用的规则是理解操 作系统一些关键性代码的基础

堆栈寄存器和堆栈操作 ♦ 堆栈相关的寄存器 –esp ,堆栈指针( stack pointer ) –ebp ,基址指针( base pointer ) ♦ 堆栈操作 –push 栈顶地址减少 4 个字节( 32 位) –pop 栈顶地址增加 4 个字节 ♦ebp 在 C 语言中用作记录当前函数调用基址 esp ebp 高地址 低地址 esp

利用堆栈实现函数调用和返回 ♦ 其他关键寄存器 –cs : eip :总是指向下一条的指令地址 顺序执行:总是指向地址连续的下一条指令 跳转 / 分支:执行这样的指令的时候, cs : eip 的值会 根据程序需要被修改 call :将当前 cs : eip 的值压入栈顶, cs : eip 指向被 调用函数的入口地址 ret :从栈顶弹出原来保存在这里的 cs : eip 的值,放 入 cs : eip 中 发生中断时?

函数的堆栈框架 // 调用者 … call target … // 建立被调用者函数的堆栈框架 pushl %ebp movl %esp, %ebp // 拆除被调用者函数的堆栈框架 movl %ebp,%esp popl %ebp ret // 被调用者函数体 //do sth. … call 指令: 1 )将 eip 中下一条指令的地 址 A 保存在栈顶 2 )设置 eip 指向被调用程序 代码开始处 将地址 A 恢复到 eip 中

函数堆栈框架的形成 ♦call xxx – 执行 call 之前 – 执行 call 时, cs : eip 原来的值 指向 call 下一条指令,该值被 保存到栈顶,然后 cs : eip 的值 指向 xxx 的入口地址 ♦ 进入 xxx – 第一条指令: pushl %ebp – 第二条指令: movl %esp, %ebp – 函数体中的常规操作,可能会压栈、出栈 ♦ 退出 xxx –movl %ebp,%esp –popl %ebp –ret esp ebp 高地址 低地址 cs : eip esp ebp esp ebp esp

一段小程序 源文件: test.c 这是一个很简单的 C 程序 main 函数中调用了函数 p1 和 p2 首先使用 gcc –g 生成 test.c 的可 执行文件 test 然后使用 objdump –S 获得 test 的反汇编文件

观察 p2 的堆栈框架 ♦ 从 test 的反汇编文件中找到 p2 的反汇编代码 int p2(int x,int y) { push %ebp mov %esp,%ebp return x+y; mov 0xc(%ebp),%eax add 0x8(%ebp),%eax } movl %ebp,%esp pop %ebp ret 建立框架 拆除框架 ebp esp ebp 调用者 堆栈 框架 esp ebp y x 高地址 低地址

如何传递参数给 p2 的 … z=p2(x,y); pushl 0xfffffff8(%ebp) pushl 0xfffffff4(%ebp) call b add $0x8,%esp mov %eax,0xfffffffc(%ebp) printf("%d=%d+%d\n",z,x,y); pushl 0xfffffff8(%ebp) pushl 0xfffffff4(%ebp) pushl 0xfffffffc(%ebp) push $0x call 80482b0 … p2 的返回值是如何返回给 main 的? 调用者 堆栈 框架 esp ebp y 的值 x 的值 高地址 低地址 被调用者 堆栈 框架 ebp cs:eip esp ebp esp

观察 main 中的局部变量 ebp int main(void) { push %ebp mov %esp,%ebp sub $0x18,%esp … char c='a'; movb $0x61,0xfffffff3(%ebp) int x,y,z; x=1; movl $0x1,0xfffffff4(%ebp) y=2; movl $0x2,0xfffffff8(%ebp) … 调用者 ebp esp ebp esp c=‘a’ x=1 y=2 高地址 低地址

观察程序运行时堆栈的变化 eip main … p1(c) … p2(x,y) … p1 p2 main p2 p1 程序的代码段 堆栈 eip esp main 堆栈 c eip p1 的堆栈 esp eip x,yx,y p2 堆栈 eip 您能把 main 、 p1 和 p2 堆栈的内容补充完整吗?

三级函数调用程序 在这个小程序中, main 函数中 调用了函数 p2 ,而在 p2 的执行 过程中又调用了函数 p1

观察程序运行时堆栈的变化 eip main … p2(x,y) … p1 p2 … p1(c) … main p2 p1 程序的代码段 堆栈 eip esp main 堆栈 esp eip x,yx,y p2 堆栈 eip c p1 堆栈 esp 您能把 main 、 p1 和 p2 堆栈的内容补充完整吗?

C 代码中嵌入汇编代码 ♦ 内嵌汇编语法

例子 #include int main() { /* val1+val2=val3 */ unsigned int val1 = 1; unsigned int val2 = 2; unsigned int val3 = 0; printf("val1:%d,val2:%d,val3:%d\n",val1,val2,val3); asm volatile( "movl $0,%eax\n\t" /* clear %eax to 0*/ "addl %1,%eax\n\t" /* %eax += val1 */ "addl %2,%eax\n\t" /* %eax += val2 */ "movl %eax,%0\n\t" /* val2 = %eax*/ : "=m" (val3) /* output =m mean only write output memory variable*/ : "c" (val1),"d" (val2)/* input c or d mean %ecx/%edx*/ ); printf("val1:%d+val2:%d=val3:%d\n",val1,val2,val3); return 0; }

练习 这段代码的输出结果?

函数指针与回调函数 ♦ 函数指针是指向函数的指针变量,即本质是一个 指针变量。 – int (*f) (int x); /* 声明一个函数指针 */ – f=func; /* 将 func 函数的首地址赋给指针 f */ ♦ 指向函数的指针包含了函数的地址,可以通过它 来调用函数。 ♦ 回调函数就是一个通过函数指针调用的函数。如 果你把函数的指针(地址)作为参数传递给另一 个函数,当这个指针被用来调用其所指向的函数 时,我们就说这是回调函数。

函数指针的例子 void FileFunc() { printf(FileFunc\n); } void EditFunc() { printf(EditFunc\n); } void (*funcp)(); void FileFunc(); void EditFunc(); main() { funcp=FileFunc; (*funcp)(); funcp=&EditFunc; funcp(); }

什么是用户态和内核态? ♦ 一般现代 CPU 都有几种不同的指令执行级别 ♦ 在高执行级别下,代码可以执行特权指令,访问 任意的物理地址,这种 CPU 执行级别就对应着内 核态 ♦ 而在相应的低级别执行状态下,代码的掌控范围 会受到限制。只能在对应级别允许的范围内活动 ♦ 举例: intel x86 CPU 有四种不同的执行级别 0-3 , Linux 只使用了其中的 0 级和 3 级分别来表示内核态和用 户态

如何区分用户态和内核态? ♦cs 寄存器的最低两位表明了当前代码的特权级 ♦CPU 每条指令的读取都是通过 cs:eip 这两个寄存 器: 其中 cs 是代码段选择寄存器, eip 是偏移量寄存器。 ♦ 上述判断由硬件完成 ♦ 一般来说在 Linux 中,地址空间是一个显著的标志: 0xc 以上的地址空间只能在内核态下访问, 0x - 0xbfffffff 的地址空间在两种状态下 都可以访问 注意 : 这里所说的地址空间是逻辑地址而不是物理地址

问题 ♦ 我们编译好的普通应用程序(可执行文件) 有无用户态和内核态之分? ♦ 我们将它运行起来,这时有没有用户态和 内核态之分? ♦ 如果有的话,如何区分用户态和内核态?

用户态 vs 内核态 ♦ 寄存器上下文 – 从用户态切换到内核态时 必须保存用户态的寄存器上下文 要保存哪些? 保存在哪里? ♦ 中断 /int 指令会在堆栈上保存一些寄存器的 值 – 如:用户态栈顶地址、当时的状态字、当时的 cs:eip 的值

保护现场和恢复现场 保护现场 就是 进入中断程序 保存 需要用到的 寄存器 的 数据, 恢复现场 就是 退出中断程序 恢复 保存 寄存器 的 数据,

虚拟内存 ♦ 物理内存有限,是一种稀缺资源 ♦ 局部性原理 – 空间局部性 – 时间局部性 ♦ 按需调页 – 页框 ♦ 利用磁盘上的交换空间

进程的地址空间 ♦ 独立的地址空间( 32 位, 4GB ),每个进程一个 ♦ 在 Linux 中, 3G 以上是内核空间, 3G 以下是用户 空间 ♦4G 的进程地址空间使用进程私有的二级页表进行 地址转换(虚拟地址  物理地址) – 页面大小: 4KB – 页目录、页表 – 若对应的内容在内存中,则对应的二级页表项记录相 应的物理页框信息 – 否则根据需要进行装载或者出错处理 ♦ 进程调度后,执行一个新的被调度的进程之前, 要先进行页表切换

Linux 中的内核空间 ♦ 每个进程 3G 以上的空间用作内核空间 ♦ 从用户地址空间进入内核地址空间不经过 页表切换 ♦ 而是通过中断 / 异常 / 系统调用入口(也只能 如此)

Homework ♦ 请实际编译运行课间中嵌入式汇编和函数 指针的例子,体会它们的用法。 ♦C 语言中堆栈的作用是什么?请使用一个实 例说明 C 语言中堆栈的某一个作用。 ♦ 为什么要有内核态与用户态的区别?请结 合 32 位 x86 说明在 Linux 中,用户态与内核 态有哪些区别?在什么情况下,系统会进 入内核态执行?

谢谢大家! “ 有两种生成一个软件设计方 案的途径:一个是把它做得如此简单, 以致于明显不会有漏洞存在。另一个是 把它做的如此复杂,以致于不会有明显 的漏洞存在。 ”——Tony Hoare 参考资料: 《深入理解 Linux 内核》第三版