先讲一下代码在跑到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. Ubuntu下安装Nginx,PHP5(及PHP-FPM),MySQL
  2. UNIX网络编程——解决TCP网络传输“粘包”问题
  3. Qt 设置应用程序开机自启动
  4. 电脑home键在哪_电脑键盘各键的名称及使用方法
  5. python字典(一)
  6. 用mysql建立商城数据字典_把mysql数据库生成数据字典,直接可用
  7. JavaScript中的流程控制语句
  8. 算法:冒泡排序(Bubble Sort)、插入排序(Insertion Sort)和选择排序(Selection Sort)总结...
  9. Attach and Detach in VC
  10. jquery扩展提示框
  11. 【Tkinter界面化小程序】用Python做一款免费音乐下载器、无广告无弹窗、清爽超流畅哦~
  12. 计算机 高新 会计电算化,会计软件应用(用友软件系列)用友通T3试题汇编(高级会计电算化员级)...
  13. QT 资源管理器和.qrc文件的使用
  14. 在哪可以找c语言编程的答案,c语言程序设计课后习题答案.doc
  15. Python调用百度API实现人脸融合
  16. 虚拟机网络配置(配置动态ip和静态ip)
  17. HTML 制作简单的下拉菜单
  18. macbook卡在进度条开不了机_Mac 开机停在进度条解决方法
  19. 百度飞桨-基于CV的工业读表案例(修改读表范围和数值)
  20. 声纹识别损失函数总结

热门文章

  1. 车载以太网之权威指南_awk权威指南之 终结篇!
  2. 一、multiprocessing.pool.RemoteTraceback
  3. 丢失msvcr120d.dll、msvcr120.dll、msvcp120d.dll、msvcp120.dll问题解决方法
  4. linux mud 游戏,快刀幻想mud文字传奇-快刀幻想mud神器兑换码-快刀幻想mud下载v1.80-Linux公社...
  5. 基础矩阵,本质矩阵,单应性矩阵讲解
  6. 视频色彩校正简介 Introduction to Video Color Correction
  7. PCT-36.523
  8. f-fdisk做磁盘分区,起始扇区从2048块开始
  9. ORM操作models一对多、多对多关系
  10. Spring Boot 整合Redis 实现缓存