先讲一下代码在跑到setup之前的内存视图,有助于我们更好地理解setup中的操作。

在上电时,内存视图如下:

在内存的0x0位置是BIOS的中断向量表

执行Bootset之后,内存视图如下:

Bootset首先将自己本身读到了0x90000的位置,然后将4个区块的setup读入0x90200,然后打印出正在加载系统,然后将system读到0x10000的位置。

下面分析setup代码

代码在开头的一大部门是先通过BIOS中断读取一些硬件信息到0x90000~0x900A0的位置(覆盖了bootset)

然后接下来是将原来位于0x10000的system移动到0x0处,这样,BIOS的中断表都被覆盖了,因此中断不能用了。

图 重复move的代码

移动完之后,需要安装GDT和IDT表,IDT表长度为0,地址也为0;GDT表长度0x800,地址为(0x0000 0000 0009 0000)+(0x200,里面有刚读入存储的硬件信息)+(gdt标号相对于setup程序头部的偏移),该地址是32位的线性地址。在setup中安装的GDT和IDT都是临时的,只是为了jmpi 0,8这一个保护模式指令用的,后续子啊head.s中会重新安装GDT和IDT,但是那时IDT的内容是空的,等到外设初始化的时候才会装入中断入口函数。

GDT表中有三个表项:空项、system内核段、system内核数据段

图 move完之后要安装GDT和LDT
图 存储IDT和GDT的长度与地址的标号

将下图与GDT表项格式进行对比看,可以发现,内核代码段描述符的基地址组合起来就是0x0,内核数据段基地址也是0x0.

图 3个GDT表

接下来开启A20地址线并置位CR0,最后使用指令jmpi 0 , 8 ,则CS = 8 即GDT表中第八个字节往后,这是内核代码段,EIP=0,组合起来即0x0,这个地址正是move后的system地址。

图 开启A20地址线并置位CR0

Setup执行完后的内存视图:

inno setup修改properties格式内容_linux内核修炼之setup相关推荐

  1. [毕业论文][格式修改][摘要修改]毕业论文格式内容修改小技巧

    背景 毕业季临近,盲审前对毕业论文进行最后一次逐行逐字修改,遇到的一些问题和解决办法 1.自动生成的目录行距可能不一.需要选中后单独再段落种设置行距 2.符号问题 配合查找发现问题 双引号 英文 &q ...

  2. bat命令 修改ini文件内容_Linux文件内容查看相关命令

    欢迎大家一起学习交流: 正在跳转​jq.qq.com Linux系统中使用以下命令来查看文件的内容: cat.tac.nl.more.less.head.tail 你可以使用 man [命令]来查看各 ...

  3. linux shell 宏定义_linux内核修炼之系统调用

    fork()这个系统调用是有两个返回值的,在子进程中的返回值是0,在父进程中的返回值是PID,如下 图 fork一次 返回两次 关于0x80中断和特权级检查 在mian函数的sched_init()函 ...

  4. 系统架构_Linux内核系统架构介绍

    28年前(1991年8月26日)Linus公开Linux的代码,开启了一个伟大的时代.这篇文章从进程调度,内存管理,设备驱动,文件系统,网络等方面讲解Linux内核系统架构.Linux的系统架构是一个 ...

  5. Spring 如何读取properties文件内容

    http://hi.baidu.com/alizv/blog/item/d8cb2af4094662dbf3d38539.html 在现实工作中,我们常常需要保存一些系统配置信息,大家一般都会选择配置 ...

  6. Linux内核修炼之道 之 前言

    推荐博文: Linux内核"问题门"--学习问题.经验集锦 推荐下载:<Linux内核修炼之道>精华版之方法论 至此落笔之际,恰至Linux问世18周年,18年的成长, ...

  7. java中读取properties文件内容五种方式

    一.背景 最近,在项目开发的过程中,遇到需要在properties文件中定义一些自定义的变量,以供java程序动态的读取,修改变量,不再需要修改代码的问题.就借此机会把Spring+SpringMVC ...

  8. python修改ppt的字体和颜色_使用python-pptx包批量修改ppt格式的实现

    最近实习需要对若干ppt进行格式上的调整,主要就是将标题的位置.对齐方式.字体等统一,人工修改又麻烦又容易错. 因此结合网上的pptx包资料,使用python脚本完成处理. 主要的坑点在于,shape ...

  9. 解决修改properties 属性文件存在缓存问题,附带操作properties文件工具类

    2019独角兽企业重金招聘Python工程师标准>>> 在做项目的时候有些数据不一定需要在数据库管理,例如数据库连接,定时任务等等的配置..有时候需要动态修改这些数据,但在修改完后, ...

最新文章

  1. 超声波测距测速升压可调中周倒车雷达变频器传感器1:10
  2. nginx 如何调用php文件,nginx php-fpm问题无法调用文件夹中的其他php文件
  3. 西门子opc服务器注册,《西门子opc服务器的说明》.pdf
  4. 笔记+R︱信用风险建模中神经网络激活函数与感知器简述
  5. python读取文件大小、时间_Python从netCDF文件读取数据,时间为测量开始后的“秒数”...
  6. 路由模块router实现step1
  7. html备注技术支持,技术支持协议书范本
  8. 结巴分词1--结巴分词系统介绍
  9. word排版教程(标题设置,自动生成目录)
  10. 【毕业设计6】基于51单片机的红外避障小车
  11. 图像数字水印技术研究及matlab实现,基于DCT的数字水印技术研究及matlab实现.doc...
  12. Win10扬声器未插入怎么解决?
  13. 互联网营销相比传统营销的5大优势
  14. 轻量思考,重拳出击,小牛电动车如何解锁世界
  15. php prepare错误,php环境错误,Loader.php报错
  16. HP电池警告,系统侦测到电池可储存容量过低,为了最佳效能,这颗电池可能需要更换。主电池(601),Enter-继续启动,解决方法
  17. MTK6765智能安全帽方案介绍
  18. 可编程计算器(phoc)的设计与实现
  19. 完整的写出一个微信小程序的电子商城的用户人脉关系网的所有功能,所包含的前台、中台、后台所有的用户功能与管理员功能以及维护人员及客服的所有功能需求。
  20. HTC手机鉴别终极宝典

热门文章

  1. 【实用】一组原创原生样式的基础控件、UI组件样式(偏向移动端H5页面的样式)
  2. 几种经典的居中技巧(垂直和水平居中)
  3. 【3】npm run build Vue的项目,如何修改相对路径配置
  4. 多线程:pthread_cond_wait 实现原理
  5. [每日一讲] Python系列:Python概述
  6. Host Only、NAT和Bridge三种网络连接
  7. codeforces 610D D. Vika and Segments(离散化+线段树+扫描线算法)
  8. C语言的sizeof和strlen
  9. 在 DW 中插入 Flash 的参数详解
  10. 按下回车表示确定提交