
操作系统真象还原读书笔记
操作系统真象还原
explorer1212
这个作者很懒,什么都没留下…
展开
-
显卡的端口控制
hello原创 2020-12-31 20:14:38 · 243 阅读 · 0 评论 -
Linux下系统调用传递参数
当输入的参数小于5个时,Linux用寄存器传递参数eax存储子功能号ebx存参数1ecx存参数2edx存参数3esi存参数4edi存参数5原创 2020-12-31 13:16:26 · 589 阅读 · 0 评论 -
64位下编译链接32位程序
1、gcc -m322、ld -m elf_i386原创 2020-12-30 17:09:08 · 470 阅读 · 0 评论 -
文件头+elf
我们之前在加载mbr和loader的时候,是直接用了它们的地址,比如mbr是0x7c00,loader是0x900,这样的缺点是我们必须每次都用这个地址,不能改,需要提前与程序约定调用地址,这样很不方便,那么怎么改呢?我们只需要在程序文件的某个特定的地方(比如开始处)写入程序开始的地方,然后从这个特定的地方读出程序开始的地址就可以了,这就是文件头的由来。文件头中还有一些其他的信息,比如程序的大小。这样纯二进制程序就变成了文件头+文件体的形式。好处是操作系统加载程序的时候,方法可以是通用的。不好的地方原创 2020-12-30 09:18:22 · 324 阅读 · 0 评论 -
链接
在gcc中加入-c选项说明的是编译成可重定位的目标文件,这时有些符号可能是文件外部的,需要把那些包含这些符号定义的文件和该目标文件链接起来,才能形成可执行文件。链接的操作:ld xxx.o yyy.o \-Ttext 虚拟地址 \-e 程序入口 \-o 可执行文件的名字...原创 2020-12-30 08:43:54 · 81 阅读 · 0 评论 -
启动分页机制
1、准备好页目录表及页表2、将页目录表地址写入控制寄存器cr33、寄存器cr0的PG位置为1(PG位用来控制分页)cr3寄存器用来存储页目录表的物理地址,所以它又称为页目录基址寄存器PDBR(Page Directory Base Register)。要让每个进程的虚拟地址空间的3GB~4GB都指向操作系统所在的物理内存部分,因为要共享操作系统的系统调用功能。...原创 2020-12-29 22:19:24 · 232 阅读 · 0 评论 -
内存分页
分段过程下CPU加载内存段的一个改进:CPU加载内存段的过程查看段对应的段描述符,如果它的P(第47)位为1,表示段在内存中,访问过该段后,将段描述符的type的A(Accessed)位置为1,如果为0,表示不在内存中, CPU抛出NP(Not Present)异常,去执行中断描述符表中NP异常对应的中断处理程序,该程序将段从外存加载到内存,并将描述符的P位置为1,然后返回。CPU继续检查P位,如果P位为1,就可以访问它,访问过后将A位置为1。段描述符的A位清0是由谁实现的?操作系统每次发现段描述符原创 2020-12-29 14:42:53 · 494 阅读 · 0 评论 -
保护模式
段描述符段寄存器中保存的是选择子(selector),它索引到全局描述符表的对应段描述符。原创 2020-12-28 20:27:42 · 191 阅读 · 0 评论 -
loader.S解释
内核加载器原创 2020-12-28 08:50:53 · 338 阅读 · 0 评论 -
硬盘有关
1、工作原理每个盘片分上下两面,每面都存储数据,确定盘面,然后确定扇区,然后确定磁道(磁道就是同心圆环与扇区相交的弧环,它有宽度,有横截面积,数据就存储在这些“面积”中)。磁头臂带动磁头在盘片上方移动,就是在找磁道的位置,盘片高速自转,就是在磁道内定位扇区。存储和读取信息的速度被寻找磁道限制,所以采用柱面存储,尽量保证磁道不变,只改变磁面和扇区,由磁道、磁面和扇区唯一确定一个扇区(扇区是最基本的存储单元)。...原创 2020-12-28 15:58:12 · 86 阅读 · 0 评论 -
mbr(master boot record)主引导记录
稍等原创 2020-12-28 08:53:31 · 580 阅读 · 2 评论 -
BIOS
全称 Base Input & Output System,基本输入输出系统以前Intel 8086只有20条地址线,只可以访问1MB的内存空间(0x00000~0xFFFFF),这1MB的内存空间被分成多个部分,如下:地址范围功能FFFF0~FFFFF,16BBIOS入口地址,此处的内容是jmp f000: e05bF0000~FFFEF,64KB-16BBIOS范围是F0000~FFFFF共64KBC800~EFFFFC0000~C7FFF原创 2020-12-28 09:37:56 · 978 阅读 · 0 评论 -
bochs中的命令
1、nn // 单步执行原创 2020-12-28 08:35:55 · 124 阅读 · 0 评论 -
操作系统真象还原代码文件的编译汇编等
1、loader.S编译 nasm -I include/ -o loader.bin loader.S 回车将生成的 loader.bin 写入硬盘第 2 个扇区。第 0 个扇区是 MBR,第 1 个扇区是空的未使用,原因如前所述,纯粹个人喜好。dd if=./loader.bin of=/此处替换成你的安装目录/bochs/hd60M.img bs=512 count=1 seek=2 conv=notrunc回车,下面是 dd 命令的三行输出。记录了 0+1 的读入记录了 0+1 的写出原创 2020-12-27 22:53:14 · 238 阅读 · 2 评论 -
进入保护模式
3步1、加载GDTlgdt2、打开A20地址线将端口0x92的第1位置位1。in al,0x92 or al,0000_0010B out 0x92,al3、启动PE位,打开保护模式将cr0的PE位(最低位)置为1。mov eax, cr0 or eax, 0x00000001 mov cr0, eax...原创 2020-12-26 23:13:18 · 175 阅读 · 0 评论 -
全局描述符表GDT(Global Descriptor Table)
段描述符:一个段描述符用来存储和一个内存段(代码段、数据段等等)有关的信息。原创 2020-12-26 20:58:05 · 592 阅读 · 0 评论