首页 > 编程语言 >01-初始化引导程序

01-初始化引导程序

时间:2024-07-19 13:52:18浏览次数:17  
标签:初始化 01 20 16 物理地址 地址 内存 寄存器 引导


原理说明



Bios会加载第一扇区到内存中,只有512字节,因此该部分的程序无法做太多的事,因此需要扩展程序,有以下两种方式:

这里选用方式二,因为实现起来相对简单一点。



16位实模式的情况下,寄存器也是16位,详见下图右边的AX BX CX DX

  • 8086CPU的寻址范围是1MB

  • 确定物理地址的方法:
    CPU 访问内存单元时要给出内存单元的地址。
    所有内存单元构成的存储空间是一个一维的线性空间。
    每一个内存单元都有唯一的地址,叫物理地址。
    8086 有 20 位地址总线,可传送 20 位地址,寻址能力是 2^20 = 1 MB
    8086 是 16 位结构的 CPU,运算器一次最多处理 16 位的数据,寄存器的最大宽度为 16 位。
    在 8086 cpu内部处理的、传输、暂存的地址也是 16 位,寻址能力只有 64 KB

  • 如何处理地址总线 20 位的寻址能力受限于 16 位地址长度这一问题?
    用两个 16 位地址(段地址和偏移地址)合成一个 20 位的物理地址。
    地址加法器合成物理地址的方法: 物理地址 = 段地址 ∗ 16 + 偏移地址

  • 内存的分段表示法:
    内存并没有分段,段的划分来自于CPU


参考链接 :https://blog.csdn.net/AlwaysBeShine/article/details/137412067

实操


初始的start.h如下:


(1)先将寄存器的值置为0

(这里使用AT&T格式的汇编指令,另一种格式是intel格式)


编译后查看反编译文件,可以看到第一个扇区的最后两个字节的值,55和aa,说明第一个扇区中确实有引导代码,因此可以把第一扇区中的内容加载到内存中


(2)接着连接qemu调试一下


  • 按F5

  • 终端 运行任务 调试准备 继续而不扫描任务输出

  • 接着查看寄存器的值

  • 按F11可以进行单步操作,观察寄存器的值的变化

通过观察esp寄存器发现,esp寄存器的值不是0x7c00,经过检查发现是赋值的语句漏写了一个$,如下所示:

重新编译后调试,esp的值就正确了




标签:初始化,01,20,16,物理地址,地址,内存,寄存器,引导
From: https://www.cnblogs.com/kakafa/p/18305789

相关文章

  • [WesternCTF2018]shrine(Jinja2模板注入)
    首先判断出是Jinja2模板注入判断方法https://www.cnblogs.com/dghh/p/18307622importflaskimportos#创建一个Flask应用实例app=flask.Flask(__name__)#从环境变量中读取'FLAG'并设置到应用配置中app.config['FLAG']=os.environ.pop('FLAG')#定义根路径('/......
  • 1001:Hello,World! 题解
    题目链接题目描述编写一个能够输出“\(\mathtt{Hello,World!}\)”的程序,这个程序常常作为一个初学者接触一门新的编程语言所写的第一个程序,也经常用来测试开发、编译环境是否能够正常工作。提示:“\(\mathtt{Hello,World!}\)”中间没空格。解题思路梦开始的地方\(Ver3.0\)没......
  • [AGC012E] Camel and Oases 题解
    题目链接题目链接题目解法可能并没有那么难(?首先\(V\)的取值只有\(\logV\)种,即\(\lfloor\frac{V}{2^k}\rfloor\)称\(\lfloor\frac{V}{2^k}\rfloor\)为第\(k\)层,先预处理出每一层的极大连通区间我们可以把问题抽象成:每一层中选一个区间,要求覆盖\([1,n]\),且第\(0......
  • vxe-弹窗初始化激活选中Vxe-Table表格中第一行input输入框
    1.实现效果2.Modal弹窗的渲染过程一、Vue组件的生命周期Vue组件从创建到销毁会经历一系列的生命周期钩子,这些钩子为开发者提供了在不同阶段插入自定义逻辑的机会。在Modal弹窗的上下文中,这些生命周期钩子同样适用。beforeCreate:组件实例初始化之后,数据观测和事件配置之前......
  • 开发日志:windows修复SSL漏洞CVE-2016-2183(3389端口)
    漏洞危害:具有足够资源的中间人攻击者可利用此漏洞,通过“birthday”攻击检测会在固定密码与已知纯文本之间泄露XOR的冲突,进而泄露密码文本(例如安全HTTPSCookie),并可能导致劫持经认证的会话。参见《支持SSL64位块大小的密码套件(SWEET32)-修复方案》参考资料:https://blog.cs......
  • [NOIP2011 提高组] 聪明的质检员
    [NOIP2011提高组]聪明的质检员题目描述小T是一名质量监督员,最近负责检验一批矿产的质量。这批矿产共有\(n\)个矿石,从\(1\)到\(n\)逐一编号,每个矿石都有自己的重量\(w_i\)以及价值\(v_i\)。检验矿产的流程是:给定$m$个区间\([l_i,r_i]\);选出一个参数\(W\);对......
  • [GWCTF 2019]xxor
    64位,进ida第一个for循环,输入六个32位字符串,转换成整数,存到v6数组第二个for循环,函数是把低位和高位分成了两个dword,就是在一个循环中一下处理了两个数据(两个32位数据在64位数组中)然后看看这个unk_601060,32位对齐,所以里面的数据就是(2,2,3,4)接下来就是sub_400686这个加密函数可......
  • [米联客-安路飞龙DR1-FPSOC] FPGA基础篇连载-01 软件工具环境搭建
    软件版本:Anlogic-TD5.9.1-DR1_ES1.1操作系统:WIN1064bit硬件平台:适用安路(Anlogic)FPGA实验平台:米联客-MLK-L1-CZ06-DR1M90G开发板板卡获取平台:https://milianke.tmall.com/登录"米联客"FPGA社区http://www.uisrc.com视频课程、答疑解惑!1代码编辑vscode工具软件安......
  • [米联客-安路飞龙DR1-FPSOC] FPGA基础篇连载-01 软件工具环境搭建
    软件版本:Anlogic-TD5.9.1-DR1_ES1.1操作系统:WIN1064bit硬件平台:适用安路(Anlogic)FPGA实验平台:米联客-MLK-L1-CZ06-DR1M90G开发板板卡获取平台:https://milianke.tmall.com/登录"米联客"FPGA社区http://www.uisrc.com视频课程、答疑解惑!1代码编辑vscode工具软件安装使用......
  • MTRX1701  Sensors, Actuators and Control
    MTRX1701 Introductionto Mechatronic EngineeringAssignment 2:Sensors,ActuatorsandControl                                  2024Notes on the Assignment1.         Thisassignment isworth 10%ofyourf......