![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
卓一笔记
欧阳秦穆
无问西东
展开
-
卓一笔记---ELF文件结构介绍
上图是ELF文件大致的结构。在计算机科学中,ELF是一种用于二进制文件、可执行文件、目标代码、共享库和核心转储格式的文件。是UNIX系统实验室(USL)作为应用程序二进制接口(Application Binary Interface,ABI)开发和发布的,也是Linux的主要可执行文件格式。1999年,被86open项目选为x86架构上的类Unix操作系统的二进制文件标准格式,用来取代COFF。因其可扩展性与灵活性,也可应用在其它处理器、计算机系统架构的操作系统上。 如下...原创 2020-08-31 23:44:11 · 952 阅读 · 0 评论 -
卓一笔记---FAT12系统介绍
FAT12是DOS时代就开始使用的文件系统(File System),直到2009年仍然在软盘上使用。 具体结构如下图: 引导扇区(Boot Sector) 位于第一个扇区,在软盘上就是0柱面(磁道)0磁头1扇区,开机引导程序在这里。 文件分配表(FAT) 紧接着引导扇区的是两个完全相同的FAT表,每个FAT表占用9个扇区,数据区的物理映射图,FAT中每个条目占用12字节,该条目代表文件在数据区中的扇区编号,每个条目和数据区中的扇区编号一一对应。 ...原创 2020-08-30 21:24:40 · 502 阅读 · 0 评论 -
汇编———64位电脑编译链接32位汇编程序错误与解决方法
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本文链接:https://blog.csdn.net/weixin_41885085/article/details/79661986很多书籍由于时间原因,示例代码用的是32位的,但现在很多电脑都是64位了,往往就会出现一些问题(ps:我们老师说以后教学可能不用x86汇编了,改用mips汇编...原创 2019-09-15 16:20:49 · 552 阅读 · 0 评论 -
卓一笔记---利用boot引导程序加载其他源文件中的代码并执行
一个人不应望着那山还比这山高,应该慢慢的积蓄自己的力量.生活中总是听到人们说这个人赚了多少多少钱?那个人赚了多少多少钱?这个人怎么怎么厉害?那个人怎么怎么厉害.这么多的诱惑让我们眼花缭乱.<<九方皋相马>>中的说"见其所见,不见其所不见",抓住事物的本质才能有所成就.常立志则无志,一定要耐心地走好自己的那条路,切莫邯郸学步/东施效颦. 本文主要讲解...原创 2019-08-26 23:18:06 · 346 阅读 · 1 评论 -
卓一笔记---中断表(INT表)的使用
本节主要讲解如何利用INT表显示一些信息.INT表中文名为中断表,在上节中利用int 15h求出了系统内存的信息,这就是一个中断程序.INT表中存储的是中断向量,我们可以自定义中断和中断向量表,然后利用int 指令显示自己想要的信息.1.构建pm.inc文件,中断向量显示时需要的一些属性DA_LDT EQU 82h;局部描述符表段类型值DA_32 ...原创 2019-08-12 23:19:49 · 1748 阅读 · 0 评论 -
卓一笔记---分页管理利用线性地址切换物理地址显示不同的字符串
本节利用分页管理,首先让线性地址指向一个内存段显示一个字符串"foo",然后改变线性地址指向的内存地址,重新输出一个字符串"bar".1.首先构建pm.inc,汇编分页管理所需要的属性DA_LDT EQU 82h;局部描述符表段类型值DA_32 EQU 4000h ;32位段DA_LIMIT_4K EQU 8000h ; 段界限粒度...原创 2019-08-12 22:25:57 · 280 阅读 · 0 评论 -
卓一笔记---显示系统总的内存大小
忙碌了一阵,总算把分页管理的代码调通了.本节讲述系统内存的查询和显示,为分页管理实践做准备.分页管理前求出系统的总内存大小后,就可以根据实际的总内存大小初始化页目录表和页表,以便节省页目录表和页表占用的空间.1.首先构建文件pm.inc,初始化了一些需要的属性DA_LDT EQU 82h;局部描述符表段类型值DA_32 EQU 4000h ;32位段DA_DRW E...原创 2019-08-12 22:05:42 · 285 阅读 · 0 评论 -
磁盘扇区如何编号?
硬盘最基本的组成部分是由坚硬金属材料制成的涂以磁性介质的盘片,不同容量硬盘的盘片数不等。每个盘片有两面,都可记录信息。盘片被分成许多扇形的区 域,每个区域叫一个扇区,每个扇区可存储128×2的N次方(N=0.1.2.3)字节信息。在DOS中每扇区是128×2的2次方=512字节,盘片表 面上以盘片中心为圆心,不同半径的同心圆称为磁道。硬盘中,不同盘片相同半径的磁道所组成的圆柱称为柱面。磁道与柱面都...转载 2019-08-13 22:29:13 · 7987 阅读 · 0 评论 -
卓一笔记---一个20行的引导程序
鄙人从今天起学习于渊老师的自己写操作系统一书,特此做笔记,以供来日参考.1.编辑程序boot.asm,内容如下org 07c00h ;告诉编译器程序加载到7c00地址处mov ax, csmov ds, axmov es, axcall DispStr ;显示字符串jmp $DispStr:mov ax, BootMessagemov bp, ax ;10号bio...原创 2019-07-09 22:44:30 · 196 阅读 · 0 评论 -
卓一笔记---用bochs调试操作系统
首先需要安装调试版本的bochs,在linux下安装bochs可以按照下面的步骤进行:1.到https://sourceforge.net/projects/bochs/files/bochs/ 网站下载bochs软件包bochs-2.6.9.tar.gz.2.用tar -xvf bochs-2.6.9.tar.gz将压缩包解压,解压后的目录如下进入bochs-2.6.9目录...原创 2019-07-10 23:38:56 · 307 阅读 · 0 评论 -
卓一笔记--低优先级程序向高优先级程序跳转
这篇作为优先级跳转的结局篇,最终实现低优先级到高优先级程序的跳转.上节中利用ret命令,程序从高优先级跳转到了低优先级代码段,本节将利用门和TSS实现程序由低优先级跳转回高优先级. TSS的结构如下,主要是将0,1,2优先级的堆栈信息入栈进行保存.当程序从低优先级跳到高优先级时,不仅代码段优先级变了,堆栈段优先级也变了,因此需要从TSS中取出高优先级堆栈段,这样程序才能正常运行;...原创 2019-07-31 22:31:42 · 385 阅读 · 0 评论 -
卓一笔记--高优先级程序跳转到低优先级程序
忙碌了几天,终于有时间静下心来写些东西.今天要讲的是:利用ret命令实现高优先级向低优先级的过渡. ret执行前后指针的变化如下图,ret执行后,压入栈中的cs,eip会从栈顶弹出来,调用函数压入的参数也会从栈顶一一弹出来.利用ret这一特性,可以构建程序,实现高优先级段向低优先级段的跳转1.构建pm.inc文件DA_LDT EQU 82h;局部描述符表段类型值D...原创 2019-07-31 21:50:26 · 453 阅读 · 0 评论 -
卓一笔记---门描述符的使用
好的开端是成功的一半,长期的坚持才能赢得最后的掌声. 通过门调用代码过程如下图箭头所示:注意:实际上门描述符和代码描述符结构不一样,只是为了看着方便才将两者放到一起.门调用代码的过程是:门选择子->门描述符->代码段选择子->代码段描述符->执行代码段下面是使用门调用代码的实践:1.首先构建文件pm.incDA_LDT EQU 82h...原创 2019-07-22 22:49:55 · 274 阅读 · 0 评论 -
卓一笔记---低权限级代码访问高权限级代码尝试
爱迪生说过:"9999次的失败换来了这次的成功.",因此我们要不断的去尝试.本文虽未实现低权限级段到高权限级段的访问,但是这是一次值得的尝试,至少通过这次尝试,我们知道直接用低权限级代码访问高权限级代码是无法访问的.1.构建pm.inc文件DA_LDT EQU 82h;局部描述符表段类型值DA_32 EQU 4000h ;32位段DA_DRW EQU 92h ; 存在的...原创 2019-07-21 23:41:15 · 224 阅读 · 0 评论 -
卓一笔记---CPL,RPL,DPL如何控制程序的访问
级别的数字越大代表权限越小1.当访问一致代码段时,DPL定义了最大权限级别,即CPL,RPL>=DPL才能访问一致代码段2.访问数据段时,DPL定义了最小权限级别,即CPL,RPL<=DPL才能访问,数据段3.不通过门描述符,直接访问非一致代码段时,DPL定义了访问的级别,即CPL,RPL=DPL4.通过门访问非一致代码段时,DPL定义了最大的权限级别,即RPL...原创 2019-07-21 00:03:18 · 222 阅读 · 0 评论 -
卓一笔记---汇编入栈时堆栈指针esp如何变化
最近看orange's 一个操作系统的实现,对其中字符串显示函数DispStr中的语句mov esi:[ebp+8]很是费解.为何只压入了一个字符串首地址,这里需要加上8才到字符串首地址?要明白这个问题,需要了解函数调用前后堆栈指针esp的变化. 假设有个汇编函数test如下:test:push ebp ;保...原创 2019-07-24 23:20:34 · 2054 阅读 · 0 评论 -
卓一笔记--实模式跳到保护模式再跳回实模式
书接上回,上节<卓一笔记>--保护模式下访问5M地址处数据讲到实模式跳到保护模式,在保护模式下访问5M大地址处的数据.眼尖的同学肯定发现了这段代码进入保护模式后就再没有出来,那如何回到实模式吗?请看此节讲解首先构建pm.incDA_32 EQU 4000h ;32位段DA_DRW EQU 92h ; 存在的可读写数据段属性值DA_...原创 2019-07-17 23:29:54 · 218 阅读 · 0 评论 -
卓一笔记---局部描述符表(LDT寻址表)的使用
知识是浩瀚的海洋,一人穷其一生也不可能学完.但是每个人都可以像令狐冲/乔峰一样学一门独门绝技,驰骋江湖.汇编就是这样一门武学,静静修之,可使内功与日俱增.今天要讲的是LDT寻址表. GDT,LDT表都是32位系统用来寻址用的.GDT是全局的,LDT是局部的.当有局部任务时,GDT中应该包含LDT表存放的位置,这样当处理器在段描述符表中找到LDT描述表后发现是局部任务,这样...原创 2019-07-19 20:55:28 · 1625 阅读 · 0 评论 -
卓一笔记--保护模式下访问5M地址处数据
功夫不负有心人.忙了2个小时,总算把保护模式下操作1M以上地址数据的程序调通了.学东西还是古话好"纸上得来终觉浅,绝知此事要躬行". 文中主要是先将地址5M处的数据段的前8个字节拿出来输出了下,然后将5M处数据段的前8个字节修改后再次拿出来输出了下.下面是本次成果的代码:pm.inc DA_32 EQU 4000h ;32位段DA_DRW EQU 92h ...原创 2019-07-17 00:32:33 · 159 阅读 · 0 评论