【OS学习笔记】十九 保护模式六:保户模式下操作系统内核如何加载用户程序并运行

上一篇文章学习了保户模式下如何进行内存保护 与 别名段的意义与作用:点击链接查看上一篇文章:点击链接

本文接着学习,在保护模式下,内核是如何加载用户程序并运行的。其实这与在实模式下很像,只不过现在保护迷失多了个描述符而已。所以尽量先参考实模式下的加载过程,再来阅读本篇文章或许会更好。点击链接查看实模式的加载过程:实模式下内核加载用户程序到内存

1、用户程序的加载和重定位

1.1 用户程序的结构

所有操作系统的可执行文件都包括文件头(这个文件头其实是由连接器构造的)。然后就是各种段,包括数据段,代码段等。

在用户程序的头部是一些重定位需要的信息。比如段的信息,以及符号的信息。段的信息在之前的实模式中讲的很清楚了。

符号的信息的话,内核要求,用户程序必须在头部偏移量位0x28 的地方构造一个表格,并在表格中列出所有要用到的符号名。内核会分析这个表格,并将这里面的符号全部换成相应的内存地址,即将函数的地址换过来。

这里面当然包括程序中所有的函数,包括系统调用的函数。

程序自己本身定义的函数地址好找,在加载的时候,加载器重定位代码段之后,即得到了所有的函数地址,将符号表里出现的函数全部换成该相应函数代码的地址即可。

但是系统调用函数的话,地址在哪里呢? 其实跟用户程序一样,内核也会在某一个地方定义一个符号表,这个符号表里存放的都是内核的系统函数,专门供用户程序调用的。当用户程序调用系统函数,内核就会对比内核的符号表与用户程序的符号表,将相应的内核函数的地址传送给用户程序的相应符号处。

这其实就是符号重定位的一个过程。当然在这之前已经做好了符号解析。符号解析的意思就是代码中相应的符号的定义与引用处进行一个关联。

1.2 计算用户程序的扇区数

了解了程序的结构,当然就是要从硬盘上读取用户程序。那么首先要计算用户程序的大小,因为读取硬盘是按照扇区为单位的,所以要计算用户程序的扇区数。

这从用户程序头即可得出结果。

1.3 简单的动态内存分配

计算好用户程序的扇区数后,就是将用户程序读取到内存中了。那么就需要进行内存的分配工作。这个具体的流程也参考实模式下的过程。

1.4 段的重定位和描述符的创建

其实到这里才与实模式有一点区别,上述几个步骤与实模式完全一样。

并且段的重定位过程也与实模式相同,只不过加了个描述符。

将用户程序读到内存中后,现在就需要根据用户程序的头部来创建段描述符。

安装完用户程序头部的段描述符后,将该段的选择子写回到用户程序头部。供用户程序在接管处理器控制权后使用。

头部的段安装创建好后。接下来是安装和创建数据段与代码段等的段描述符,然后也将相应的段选择子写回到用户程序头部供后面用户程序使用

唯一不同的是栈段。栈段不需要用户程序自己提供,而是有内核动态分配。内核分配站空间时每次都是以4KB位单位的。同理,栈段描述符创建好之后也需要将段选择子写回到用户程序头部供后面用户程序使用。

1.5 重定位用户程序内的符号地址

符号的重定位,主要包括自己程序定义的函数与变量符号的重定位,以及系统调用函数的重定位。这在1.1节的程序结构中已经说过,比较容易理解。

2 用户程序的执行

在经过上面的:

  • 读取用户程序并分配内存
  • 重定位段并创建段描述符
  • 重定位符号

后,下面就是运行程序了。一般是使用一个段间远转移指令jmp后,跳转到用程序的入口函数地址。

3、总结

本篇文章写的不是很详细,只是说出了大概过程。详细过程参考书籍与实模式的那篇文章。

笔记记得不是很全,如果有不懂的可以加我联系方式一起交流。

学习探讨加个人:
qq:1126137994
微信:liu1126137994

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/422995.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据思维整理

数据思维整理分享

常用的LaTeX公式用法

常用的LaTeX公式用法常用的latex公式用法常用的latex公式用法 加法 效果 减法 - 效果 − 乘法(叉乘) \times 例子: aba \times bab 效果 ab 乘法(点乘) \cdot 例子: a⋅ba \cdot ba⋅b 效果 a⋅b 除法 \div 例子:$ a…

linux平台下通过mcr方式从c++程序中调用matlab函数

小细节很多,所以容易出错. 平台:linux gcc matlab2010a 1 在matlab中写好函数例如branch,调用命令 mcc -W cpplib:libbranch -T link:lib branch.m -C 注意末尾的-C,很关键用于生成ctf文件,里面有执行需要的一些配置文件 2 将libbranch.so libbranch.ctf放在同一个目录中,写c程…

【OS学习笔记】二十 保护模式六:保户模式下操作系统内核如何加载用户程序并运行 对应的汇编代码之主引导扇区程序

本汇编代码对应保户模式下操作系统内核如何加载用户程序并运行 的实际主引导扇区代码: 对应的内核代码在:内核代码对应的用户程序代码在:用户程序代码 ;代码清单13-1;文件名:c13_mbr.asm;文件说明:硬盘主引导扇区代码…

java实现sql语句中 准确替换某个字符串

sql语句中准确 替换某个字符串 1.java 代码实现1.java 代码实现 public static void main(String[] args) {String sqls = "select pk_marbasclass from marbasclass where 11=11 and (enablestate = 2) and ((pk_org = 0001A210000000000EO5)) and code in(123) and…

geoserver native JAI error 问题解决方法

学习geotools,就会用到JAI. 最好不要把jar包放到jre环境下,而是在使用的时候,引入。因为在geoserver的web-lib目录下,存在JAI的jar.如果版本冲突,还会导致geoserver无法启动。版本正确也会报错:could not l…

【OS学习笔记】二十一 保护模式六:保户模式下操作系统内核如何加载用户程序并运行 对应的汇编代码之内核代码

本汇编代码对应文章保户模式下操作系统内核如何加载用户程序并运行 中的实际内核代码 对应的主引导扇区代码:主引导扇区代码对应的用户程序代码:用户程序代码 ;代码清单13-2;文件名:c13_core.asm;文件说明:保护模式微型核心程序 …

windows7下iis网站的.net框架版本设置

昨天下载了 VS2010 创建了一个默认的WebApplication,想看看在iis中运行的情况,虽说用了几个月的 win7 ,但还从没有用过IIS。首先给人的感觉是IIS变化很大,多出了很多东西,让人感到很茫然。 先建个网站试试,…

【OS学习笔记】二十二 保护模式六:保户模式下操作系统内核如何加载用户程序并运行 对应的汇编代码之用户程序

本汇编代码对应文章:保户模式下操作系统内核如何加载用户程序并运行中的实际用户程序代码。 对应的主引导扇区代码:主引导扇区代码对应的内核代码:内核代码 ;代码清单13-3;文件名:c13.asm;文件说明:用户程序 ; SECTIO…

评教有感

上个星期学校组织了对教师的评比,用的是坤哥和六期师哥师姐做的评教系统。自己不但参与了评教的工作,还去五楼值班维持秩序。在值班的过程中碰到了米老师,再次认识到自己的不足。学习应该是无处不在的,就算是值班过程中也是可以学…

【OS学习笔记】二十三 保护模式七:保护模式下任务的隔离与任务的特权级概念

上一篇文章学习了保护模式下操作系统内核如何加载程序并运行:点击链接查看上一篇文章 本篇文章接着上一篇文章学习保护模式下任务的隔离。 包括以下学习内容: 任务的全局空间和局部空间任务的TSS任务的LDT任务的特权级概念等 1、回顾 在保护模式下&…

[Drupal] How to add the js file and js code block in Drupal

Drupal 6:代码//This will add a JS file to your head (specifically the $scripts variable in page.tpl.php)drupal_add_js(drupal_get_path(module,my_module) ./my_module.js); //This add inline JS to the head of the documentdrupal_add_js(alert("Hello!"…

【OS学习笔记】二十四 保护模式七:调用门与依从的代码段----特权级保护

学习交流加 个人qq: 1126137994个人微信: liu1126137994学习交流资源分享qq群: 962535112 上一篇文章学习了保护模式下的任务与任务隔离,以及简单介绍了保护模式下的特权级的概念。点击链接查看上一篇文章:任务与任务隔…

在虚拟机中安装和配配置 MOSS2007 全过程

1. 首先在计算机上安装 VMware 虚拟机软件2. 在虚拟机中安装WIN2003 SP2企业版3. 进入添加删除程序 Windows 添加组件向导 添加以下组件 a. 网络服务中的域名系统(DNS) b. 电子邮件服务中的POP3服务 c. 应用程序服务器中的 IIS d. ASP.NET e. 还有IIS中的SMTP service4. 如…

【OS学习笔记】二十五 保护模式七:任务和特权级保护对应的汇编源代码

本汇编代码是以下两篇文章讲解的内容的内核代码; 【OS学习笔记】二十三 保护模式七:保护模式下任务的隔离与任务的特权级概念【OS学习笔记】二十四 保护模式七:调用门与依从的代码段----特权级保护 需要先学习上述两篇文章的内容,方能看懂下…

MOSS/Sharepoint 如何更改一台已经安装了SharePoint的服务器名称

似乎许多朋友遇到这样的问题:服务器上已经安装了SharePoint Server 2007,但需要改掉这个服务器的名称。直接改的话,总是会导致网站无法访问的情况。 具体做法可参考如下步骤: 第一步:在SharePoint3.0管理中心中修改“替…

【OS学习笔记】二十六 保护模式八:任务门---任务切换

上一篇文章学习了:保护模式七:调用门与依从的代码段----特权级保护 主要学习了以下内容: 描述符特权级(目标对象的特权级)DPL 描述符特权级(目标对象的特权级)DPL 当前特权级CPL 低特权级的应…

腾讯微博应用

腾讯微博开放平台提供了一些官方微博应用,供开发者借鉴和利用,其中包括: 一键转播——嵌入一键转播到你的网站里,访客便能将网页信息直接传播至腾讯微博。分享资讯的同时,用户通过来源链接可进入你的网站,从…

【OS学习笔记】二十七 保护模式八:任务切换的方法之----jmp与call的区别以及任务的中断嵌套

上一篇文章学习了任务门的概念:任务门—任务切换。主要学习了以下内容: 使用任务门进行任务切换的一般工作原理(和中断有关的任务切换) 本篇文章接着上一篇文章学习以下内容: 利用jmp进行任务切换利用call进行任务切…

Windows Phone 7 开发 31 日谈——第22日:应用?还是 游戏?

本文是“Windows Phone 7 开发 31 日谈”系列的第22日。 昨天,我发了一篇极长的关于Silverlight Toolkit for Windows Phone的文章。今天的会短一些,但却非常珍贵。我会讨论你的应用程序设置中非常细微但很重要的设置:类别(Genre&…