
操作系统相关
文章平均质量分 69
BMOP
这个作者很懒,什么都没留下…
展开
-
初步学习Protected Mode(1)
根据书本上的知识学习 大牛可以无视 本菜的自我总结实模式到保护模式的总步骤1、初始化GDT和选择子2、16位初始化32位代码段描述符,为进入32位代码段做准备3、加载gdtr4、关闭中断5、打开地址线6、用jmp正是切换到保护模式%include "pm.inc" ; 常量, 宏, 以及一些说明org 0100h jmp LABEL_BEGIN原创 2014-02-24 23:18:05 · 944 阅读 · 0 评论 -
“段寄存器”的故事
http://blog.youkuaiyun.com/michael2012zhao/article/details/5554023一、 段寄存器的产生段寄存器的产生源于Intel 8086 CPU体系结构中数据总线与地址总线的宽度不一致。 数据总线的宽度,也即是ALU(算数逻辑单元)的宽度,平常说一个CPU是“16位”或者“32位”指的就是这个。8086CPU的数据总转载 2014-09-22 22:16:04 · 523 阅读 · 0 评论 -
汇编和C同步使用(Linux下编译ELF)
要编译一个内核,必须要想办法将C和汇编语言连接在一起。这里是一个汇编语言的一份代码:foo.asm; 编译链接方法; (ld 的‘-s’选项意为“strip all”);; [root@XXX XXX]# nasm -f elf foo.asm -o foo.o; [root@XXX XXX]# gcc -c bar.c -o bar.o; [root@XXX XXX]#原创 2014-04-01 15:35:29 · 979 阅读 · 0 评论 -
内核雏形——跳入保护模式
源于《自己动手写操作系统》内核已经被我们加载进内存了,现在要跳入保护模式了~在拉出.asm文件之前,有几个inc文件必须说明一下lib.inc; ------------------------------------------------------------------------; 显示 AL 中的数字; ---------------------------------原创 2014-04-02 23:04:14 · 862 阅读 · 0 评论 -
内核雏形——从Loader到内核
《自己动手Loader需要做两项工作:加载内核到内存,跳入保护模式。我们先来研究第一项,用Loader加载ELF。加载内核到内存这一步和引导扇区的工作非常相似,只是处理内核时我们需要根据Program header table中的值把内核中相应的段放到正确的位置。这里有一份inc文件,在后续的asm文件中被引用到fat12hdr.inc; FAT12 磁盘的头;原创 2014-04-02 22:38:30 · 1059 阅读 · 0 评论 -
ELF(Executable and Linkable Format)文件结构
从Linking View可以看出,ELF文件由4部分组成:ELF header(ELF头), 程序头表(Program header table), 节(Sections)和节头表(Section header table)。实际上,一个文件中不一定包含全部这些内容,而且它们的位置也未必这样安排。只有ELF头的位置是固定的,其余各部分的位置、大小等信息由ELF头中的各项值来决定。ELF he原创 2014-04-01 16:16:00 · 1429 阅读 · 0 评论 -
初步学习Protected Mode(7)
中断和异常在保护模式下,中断机制发生了变化。中断向量表由IDT来代替。每一种中断对应一个中断向量号,这个向量号通过IDT与对应的中断处理程序对应起来。处理器接受三类异常。 Faults,可以被更正,并且更正后连续执行原来的指令。Traps,可以被更正,更正后执行产生trap之后的那条指令。Aborts,严重错误,无法更正。中断产生的两种原因:外部中断(由硬件产生的中断)原创 2014-03-21 14:57:06 · 827 阅读 · 0 评论 -
Windows下编译ELF的血泪史
在Win下GCC使用命令nasm -f elf -o foo.o foo.asm 一直报错:File not recognize换了一个版本的GCC还是不行最后用了工具ELFParser检查才发现貌似Win下的GCC不支持生成ELF格式的文件啊 求大牛指正原创 2014-03-31 00:29:07 · 2431 阅读 · 2 评论 -
再理解Protected Mode
段机制轻松体验(实模式和保护模式)[内存寻址]实模式下的内存寻址:让我们首先来回顾实模式下的寻址方式段首地址×16+偏移量=物理地址为什么要×16?因为在8086CPU中,地址线是20位,但寄存器是16位的,最高寻址64KB,它无法寻址到1M内存。于是,Intel设计了这种寻址方式,先缩小4位成16位放入到段寄存器,用到时候,再将其扩大到20位,这也造成了段的首地址必须是16的转载 2014-03-01 18:28:44 · 884 阅读 · 0 评论 -
初步学习Protected Mode(6)
克勤克俭用内存。如果我们用了16MB的空间来存放页表,那么它映射了16G的内存空间,而我们的物理内存不一定有那么大(外星人之类的呵呵)。这实在是一种浪费,所以我们必须确定内存有多大,然后根据内存大小确定多少页表是可用的。原创 2014-03-01 18:44:17 · 776 阅读 · 0 评论 -
初步学习Protected Mode(5)
页式存储:1、页就是一块内存。在80386中,页的大小是固定的4KB。2、逻辑地址、线性地址、物理地址在未打开分页机制时,线性地址等同于物理地址。逻辑地址通过分段机制直接转换成物理地址。担当分页开启时,分段机制将逻辑地址转换成线性地址,线性地址再通过分页机制转换成物理地址。3、分页机制概述物理地址=F(线性地址)转换使用两级页表,第一级叫做页目录,大小为4KB。存储原创 2014-02-28 14:31:10 · 986 阅读 · 1 评论 -
吐槽一下nasm
装了个nasm,今天发现它把PATH变量直接盖了,害得我VS跪了=。=原创 2014-02-28 19:32:02 · 548 阅读 · 0 评论 -
特权级1——RPL、DPL、CPL
保护模式中最重要的一个思想就是通过分级把代码隔离了起来,不同的代码在不同的级别,使大多数情况下都只和同级代码发生关系。Intel的80286以上的cpu可以识別4个特权级(或特权层) ,0级到3级。数值越大特权越小。一般用把系统内核放在0级,系统的其他服务程序位于1、2级,3级则是应用软件。一般情况下代码都在自己的级别下做自己的工作,同一级别之间可以相互访问,而一般是不允许不同级别的代码间随意访问转载 2014-02-27 17:33:05 · 1641 阅读 · 0 评论 -
初步学习Protected Mode(4)
回忆jmp和call时堆栈的影响:对于jmp来说,短跳转对应段内,长跳转对应段间。对堆栈没有影响call指令会影响堆栈,长调用和短调用对堆栈的影响是不同的。对于短调用来说,call指令执行时下一条指令的eip压栈。到ret指令执行时,这个eip会被从堆栈中弹出。如果是长调用,如图:高地址 参数1 参数2eipcs低地址原创 2014-02-27 17:32:27 · 740 阅读 · 0 评论 -
初步学习Protected Mode(3)
程序从一个代码段转移到另一个代码段之前,目标代码段的选择子会被加载到cs中。作为加载过程的一部分,处理器会检查描述符的界限、类型、特权级等内容。如果检验成功,cs会被将在,程序控制将转移到新的代码段中,从eip指示的位置开始执行。使用jmp或call进行直接转移:如果目标是非一致代码段,要求CPL必须等于目标段的DPL,同时要求RPL小于DPL。如果目标是一致代码段,则要求CP原创 2014-02-26 22:56:27 · 715 阅读 · 0 评论 -
初步学习Protected Mode(2)
LDT Local Descriptor Table; ==========================================; pmtest3.asm; 编译方法:nasm pmtest3.asm -o pmtest3.com; ==========================================%include "pm.inc" ; 常量, 宏, 以原创 2014-02-25 18:23:06 · 693 阅读 · 0 评论 -
初探如何编写系统引导程序
计算机启动过程 当按下电源开关后,将发送电信号给BIOS,BIOS获得电信号后将启动自检程序检查周边设备是否通电完毕 检查完毕后,自检程序将控制权交还BIOS,BIOS然后读取引导启动盘的启动程序 在虚拟机里选择软盘启动,计算机会检查软盘的0面0磁道1扇区,如果发现它以0xAA55则BIOS认为它是一个引导扇区,也就是Boot Sector。原创 2014-02-24 16:48:59 · 1223 阅读 · 0 评论 -
x64 下的 segmentation 情形
6.1、 x64 下的物理资源及系统数据结构6.1.1、 segment registers x64 体系在硬件级上最大限度地削弱了 segmentation 段式管理。采用平坦内存管理模式,因此体现出来的思想是 base 为 0、limit 忽略。 但是,x64 还是对 segmentation 提供了某种程度上的支持。体现在 FS 与 GS 的与众不同。 segmen转载 2014-09-17 12:24:15 · 835 阅读 · 0 评论