
系统内核与实现学习
jadeshu
这个作者很懒,什么都没留下…
展开
-
(8)打造简单OS-中断
一、中断简介1.1简介 早期计算机各个程序只能串行执行、系统资源利用低。为了解决上述问题,人们就发明了操作系统,引入了中断机制,实现了多道程序的并发执行,提高了系统资源的利用率。 中断是多程序并发执行的前提条件。1.3实模式下的中断向量表 详情点击二、中断分类2.1外部硬件中断外中断:外中断的信号来源于CPU外部、与当前执行的指令无关。如用户强...原创 2020-01-09 16:27:47 · 659 阅读 · 0 评论 -
(5)打造简单OS-实模式与进入保护模式
1.简介: 8086实模式 80286才出现保护模式,保护模式下的段寄存器存储的是段选择子,不在是8086实模式的段基址了! [扩展知识]:可以看了后面知识在回头看一下这段. [8086各个段寄存器和通用寄存器都是16位,地址总线20位,采用段式段+偏移可访问物理内存1M] [80286...原创 2019-07-01 03:23:48 · 1676 阅读 · 0 评论 -
[17]Windows的启动过程
一.内核的引导 在intel x86系统上,windows操作系统获得控制首先从硬盘的主引导记录(MBR,Master Boot Record)开始,windows setup程序在安装windows时候填充mbr.mbr包含代码和数据,其代码称为引导代码,在系统引导时候首先获得控制权;MBR中的数据是一张分区表,指定了每个分区在磁盘上的位置和大小,以及分区的类型。当MBR中的引导代码被...转载 2018-12-18 02:06:35 · 259 阅读 · 0 评论 -
操作系统学习资料
1.《Linux内核完全剖析》,书的内容以Linux0.11为基础2.《操作系统真象还原》,从零实现一个操作系统,讲解相当精彩。https://www.jb51.net/books/553086.html?pc3.MIT操作系统工程的教学操作系统Xv6的源码https://github.com/deyuhua/xv6-book-chineseFAT12文件系统之数据存储方式详解h...原创 2020-04-10 01:59:37 · 271 阅读 · 0 评论 -
BIOS 中断向量表
在bochs虚拟器调试中输入info ivt可以查看BIOS中断向量表具体说明如下:中断 描述 INT 00h CPU:除零错,或商不合法时触发 INT 01h CPU:单步陷阱,TF标记为打开状态时,每条指令执行后触发 INT 02h CPU:非可屏蔽中断,如引导自我测试时发生内存错误。 INT 03h CPU:第...原创 2019-04-04 22:02:10 · 1430 阅读 · 2 评论 -
bochs模拟器创建映像文件 、写入文件并启动
安装 bochs,dd for windows,nasm,并将安装目录加入到环境变量中。我用的bochs版本是2.6.81.用 bochs 中 bximage.exe 创建新的 img 文件2.编写汇编代码并编译成二进制文件test.asm汇编文本文件org 0x7C00 ;主引导记录的内存地址jmp entryentry: mov ax, 0 mo...原创 2019-04-05 19:51:04 · 4634 阅读 · 0 评论 -
BIOS 中断大全
BIOS中断:1、显示服务(Video Service——INT 10H)00H —设置显示器模式0CH —写图形象素01H —设置光标形状0DH —读图形象素02H —设置光标位置0EH —在Teletype模式下显示字符03H —读取光标信息0FH —读取显示器模式04H —读取光笔位置10H —颜色05H —设置显示页11H —字体06H、07H —初始化或滚...转载 2019-03-28 15:02:23 · 1096 阅读 · 0 评论 -
CHS和LBA逻辑块地址
LBA简介磁盘读取发展IO操作读取硬盘的三种方式: chs方式 :小于8G (8064MB) LBA28方式:小于137GB LBA48方式:小于144,000,000 GB LBA方式访问使用了data寄存器,LBA寄存器(总共3个),device寄存器,command寄存器来完成的。LBA28和LBA48方式:LBA28方式使用28位来描述一个扇区地...转载 2019-04-07 17:46:22 · 9902 阅读 · 3 评论 -
《30天自制操作系统》运行错误更改
1.make时copy命令出错,把make文件更改如下:(1)把copy改成cp del改为rmdefault : ../z_tools/make.exe imgipl.bin : ipl.nas Makefile ../z_tools/nask.exe ipl.nas ipl.bin ipl.lsthelloos.img : ipl.bin Makefile ../...原创 2019-04-08 01:49:04 · 929 阅读 · 0 评论 -
(2)打造简单OS-开机BIOS初始化与MBR操作系统引导详解
================大概了解即可===============1、BIOS的工作: 我们的计算机在开机之前,它是一个纯硬件的机器,但是从按下开机按钮的那一刻起,ROM上的固化程序就开始为操作系统这个重要的软件进行初始化工作,初始化工作完成以后,将操作系统内核加载到内存中,操作系统就会帮助我们管理各种硬件资源,带给了用户良好的体验。我们普通用户通常都不关心,在...转载 2019-03-29 00:32:29 · 2322 阅读 · 0 评论 -
(3)打造简单OS-MBR引导区转移加载简单程序(突破512限制)
1、总结和开机流程 在第一节<(1)汇编写入引导区,虚拟机启动步骤>中讲解到一个简单屏幕显示一川字符串,第二节讲到BIOS启动过程! 第一节中基本原理就是将那个汇编代码用nasm汇编器进行汇编成二进制,然后把这二进制文件写入模拟的软盘system.img[磁盘]的第0面0磁道第1扇区中!然后虚拟机加载此映射文件。 ...原创 2019-03-29 00:34:30 · 1437 阅读 · 0 评论 -
OS创建页目录和页
;开始创建页目录项(PDE).create_pde: ; 创建Page Directory Entry mov eax, PAGE_DIR_TABLE_POS ; PAGE_DIR_TABLE_POS = 0x100000 add eax, 0x1000 ; 此时eax为第一个页表的位置及属性 mov ebx, eax ; ...原创 2019-04-13 16:02:24 · 512 阅读 · 3 评论 -
(4)打造简单OS-loader硬盘加载和C++写入文件
0.简要说明: 我们完全可以使用bochs创建映像文件,如https://blog.youkuaiyun.com/jadeshu/article/details/89046838 ,那么为什么还去用C++去模拟文件呢,主要更深刻的理解和自己动手,比直接创建的文件映像更深刻,了解的内容也更多!!! 当然如果想省事的话,您也可以直接用bochs直接创建映射软盘和硬盘文件,然后...原创 2019-06-23 16:03:43 · 893 阅读 · 0 评论 -
bochs调试命令
Bochs几条基本指令:通过物理地址查看内存时,可以不加参数'/nuf':其中n指定显示的单元数,默认是1;u 指定每个显示单元的大小(b表示字节、h表示字(2字节)、w表示双字(4字节)),默认是w;f 指定显示格式(x 十六进制、d 有符号十进制、u 无符号十进制、o 八进制、t 二进制、c 字符),默认是x1、指令断点1.1、设置断点1.1.1、设置在物理地...转载 2019-06-23 19:09:02 · 968 阅读 · 0 评论 -
打造简单OS-总目录
1-汇编写入引导区,虚拟机启动步骤(了解即可)2-开机BIOS初始化与MBR操作系统引导详解(了解即可)3-MBR引导区转移加载简单程序(突破512限制)(了解即可)4-loader硬盘加载和C++写入文件(重点)5-进入保护模式6-内存分页7-加载内核8-中断9-内存管理10-线程11-进程12-文件系统管理个人用的记录CPU...原创 2019-06-23 19:49:29 · 533 阅读 · 0 评论 -
ELF格式说明
ELF file header(ELF文件头)/* The ELF file header. This appears at the start of every ELF file. */#define EI_NIDENT (16)typedef struct{ unsigned char e_ident[EI_NIDENT]; /* Magic number a...原创 2019-06-23 22:22:38 · 458 阅读 · 0 评论 -
页目录项和页表项低12位意义
页目录项和页表项上图就是页目录项和页表项的格式。可以看出,由于页表或者页的物理地址都是4KB对齐的(低12位全是零),所以上图中只保留了物理基地址的高20位(bit[31:12])。低12位可以安排其他用途。【P】:存在位。为1表示页表或者页位于内存中。否则,表示不在内存中,必须先予以创建或者从磁盘调入内存后方可使用。【R/W】:读写标志。为1表示页面可以被读写,为0...原创 2019-07-21 22:33:19 · 3034 阅读 · 0 评论 -
[16]Windows内核情景分析 --- 服务管理
随时可以看到任务管理器中有一个services.exe进程,这个就是系统的服务控制管理进程,简称SCM这个进程专门用来管理服务(启动、停止、删除、配置等操作)系统中所有注册的服务都登记在\HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services键下,这个键专门叫做‘服务键’,服务键下面的每个子键代表一个服务,记录了各个服务的信息。 每...转载 2018-12-18 02:06:24 · 333 阅读 · 0 评论 -
[15]Windows内核情景分析 --- 权限管理
Windows系统是支持多用户的。每个文件可以设置一个访问控制表(即ACL),在ACL中规定每个用户、每个组对该文件的访问权限。不过,只有Ntfs文件系统中的文件才支持ACL。(Ntfs文件系统中,每个文件的ACL是作为文件的一个附加属性保存在文件中的)。不仅ntfs文件支持ACL机制,每个内核对象也支持ACL,不过内核对象的ACL保存在对象头部的安全属性字段中,只存在于内存,对象一销毁,...转载 2018-12-18 02:06:08 · 1429 阅读 · 0 评论 -
Win内核原理与实现学习笔记2-现代操作系统的基本结构
1.操作系统本属于软件的范畴,但它需要紧密的跟硬件打交道,它为上层应用软件或应用系统提供了一层抽象,专门负责硬件资源的管理和分配。(应用程序不需要跟硬件打交道,它们利用操作系统提供的功能来实现各种任务,如果需要访问硬件,则必须通过OS提供的抽象接口来完成)2.现代操作系统基本结构:3.硬件设备(如键盘、显示器、磁盘、打印机和网络等,则通过各自的驱动程序,以一致的方式交由操作系统来处原创 2016-03-01 16:54:01 · 967 阅读 · 0 评论 -
Win内核原理与实现学习笔记3-windows系统结构
1.概述1.1windows采用了双模式(dual mode)结构来保护操作系统本身,以避免被应用程序的错误而波及。操作系统核心运行在内核模式(kernel mode)下,应用程序的代码运行在用户模式(user mode)下。每当应用程序需要用到系统内核或内核的扩展模块(内核驱动程序)所提供的服务室,应用程序通过硬件指令从用户模式切换到内核模式中;当系统内核完成了所请求的服务以后,控制权又回到原创 2016-03-01 17:23:16 · 4351 阅读 · 0 评论 -
(1)打造简单OS-汇编写入引导区,虚拟机启动步骤
首先需要您在网上下载NASM编译器,可以将汇编编译为二进制文件1.写一段汇编代码在屏幕上打印一段字符可以运行的!并进行nasm为二进制文件,如下"test.asm" 至于为什么这么做的问题,您可以观看后面章节,现在只要按部就班的实际操作就好,运行起来才有直观感受,理论先放后面! 该段汇编主要是向显卡循环显示一个一个字符,最后取值为0就跳转fin执行HLT让CPU睡眠,死循环!...原创 2018-12-17 00:30:46 · 1136 阅读 · 0 评论 -
[1]windows 内核情景分析---说明
本文说明:这一系列文章(笔记)是在看雪里面下载word文档,现转帖出来,希望更多的人能看到并分享,感谢原作者的分享精神。 说明 本文结合《Windows内核情景分析》(毛德操著)、《软件调试》(张银奎著)、《Windows核心编程》、《寒江独钓-Windows内核安全编程》、《Windows PE权威指南》、《C++反汇编与逆向分析揭秘》以及ReactOS操作系统 (V0.3.12...转载 2018-12-17 21:36:01 · 196 阅读 · 0 评论 -
[2]windows内核情景分析--系统调用
Windows的地址空间分用户模式与内核模式,低2GB的部分叫用户模式,高2G的部分叫内核模式,位于用户空间的代码不能访问内核空间,位于内核空间的代码却可以访问用户空间一个线程的运行状态分内核态与用户态,当指令位于用户空间时,就表示当前处于内核态,当指令位于内核空间时,就处于内核态.一个线程由用户态进入内核态的途径有3种典型的方式:1、 主动通过int 2e(软中断自陷方式)或syse...转载 2018-12-17 21:41:30 · 572 阅读 · 0 评论 -
[3]windows内核情景分析--内存管理
32位系统中有4GB的虚拟地址空间每个进程有一个地址空间,共4GB,(具体分为低2GB的用户地址空间+高2GB的内核地址空间)各个进程的用户地址空间不同,属于各进程专有,内核地址空间部分则几乎完全相同虚拟地址如0x11111111, 看似这8个数字是一个整体,其实是由三部分组成的,是一个三维地址,将这个32位的值拆开,高10位表示二级页表号,中间10位表示二级页表中的页号,最后12位...转载 2018-12-17 21:54:52 · 560 阅读 · 0 评论 -
[4]Windows内核情景分析---内核对象
写过Windows应用程序的朋友都常常听说“内核对象”、“句柄”等术语却无从得知他们的内核实现到底是怎样的, 本篇文章就揭开这些技术的神秘面纱。常见的内核对象有:Job、Directory(对象目录中的目录)、SymbolLink(符号链接),Section(内存映射文件)、Port(LPC端口)、IoCompletion(Io完成端口)、File(并非专指磁盘文件)、同步对象(Mutex...转载 2018-12-17 21:56:18 · 502 阅读 · 0 评论 -
[6]Windows内核情景分析 --APC
APC:异步过程调用。这是一种常见的技术。前面进程启动的初始过程就是:主线程在内核构造好运行环境后,从KiThreadStartup开始运行,然后调用PspUserThreadStartup,在该线程的apc队列中插入一个APC:LdrInitializeThunk,这样,当PspUserThreadStartup返回后,正式退回用户空间的总入口BaseProcessStartThunk前,会执行...转载 2018-12-17 22:01:05 · 1050 阅读 · 0 评论 -
[7] Windows内核情景分析---线程同步
基于同步对象的等待、唤醒机制:一个线程可以等待一个对象或多个对象而进入等待状态(也叫睡眠状态),另一个线程可以触发那个等待对象,唤醒在那个对象上等待的所有线程。一个线程可以等待一个对象或多个对象,而一个对象也可以同时被N个线程等待。这样,线程与等待对象之间是多对多的关系。他们之间的等待关系由一个队列和一个‘等待块’来控制,等待块就是线程与等待目标对象之间的纽带。 WaitForSi...转载 2018-12-17 22:11:08 · 644 阅读 · 0 评论 -
[8]windows内核情景分析--窗口消息
消息与钩子众所周知,Windows系统是消息驱动的,现在我们就来看Windows的消息机制. 早期的Windows的窗口图形机制是在用户空间实现的,后来为了提高图形处理效率,将这部分移入内核空间,在Win32k.sys模块中实现。这个模块作为一个扩展的内核模块,提高了一个扩展额系统服务表,专用于窗口图形操作,相应的,这个模块中添加了一个扩展系统调用服务表Shadow SSDT,以及一个...转载 2018-12-17 22:13:19 · 1613 阅读 · 0 评论 -
[9]Windows内核情景分析 --- DPC
DPC不同APC,DPC的全名是‘延迟过程调用’。DPC最初作用是设计为中断服务程序的一部分。因为每次触发中断,都会关中断,然后执行中断服务例程。由于关中断了,所以中断服务例程必须短小精悍,不能消耗过多时间,否则会导致系统丢失大量其他中断。但是有的中断,其中断服务例程要做的事情本来就很多,那怎么办?于是,可以在中断服务例程中先执行最紧迫的那部分工作,然后把剩余的相对来说不那么重要的工作移入到D...转载 2018-12-18 02:05:02 · 2245 阅读 · 0 评论 -
[10]Windows内核情景分析---中断处理
中断处理每个cpu有一张中断表,简称IDT。IDT的整体布局:【异常->空白->5系->硬】(推荐采用7字口诀的方式重点记忆)异常:前20个表项存放着各个异常的描述符(IDT表不仅可以放中断描述符,还放置了所有异常的异常处理描述符,0x00-0x13)保留:0x14-0x1F,忽略这块号段空白:接下来存放一组空闲的保留项(0x20-0x29),供系统和程序员自...转载 2018-12-18 02:05:12 · 529 阅读 · 0 评论 -
[11]Windows内核情景分析---设备驱动
设备驱动设备栈:从上层到下层的顺序依次是:过滤设备、类设备、过滤设备、小端口设备【过、类、过滤、小端口】驱动栈:因设备堆栈原因而建立起来的一种堆栈 老式驱动:指不提供AddDevice的驱动,又叫NT式驱动Wdm驱动:指提供了AddDevice的驱动驱动初始化:指IO管理器加载驱动后,调用驱动的DriverEntry、AddDevice函数设备栈中上层设备与下层设备的绑定关...转载 2018-12-18 02:05:22 · 704 阅读 · 0 评论 -
[12]Windows内核情景分析 --- MDI
Mdl意为‘内存映射描述符’、‘缓冲描述符’,一个mdl就代表一个缓冲。(任意一块物理内存,可以同时映射到用户地址空间和系统地址空间的)设备IO方式分为三种:缓冲方式、直接IO方式、直接方式缓冲方式:将用户空间中的数据拷贝到内核缓冲,将内核缓冲中的数据拷贝到用户空间,效率低,适合少量数据交换直接IO方式:将用户空间中的内存通过MDL机制映射到系统地址空间,效率高,适合大数据交换直接...转载 2018-12-18 02:05:34 · 286 阅读 · 0 评论 -
[13]Windows 内核情景分析 --- 网络通信
典型的基于tcpip协议套接字方式的网络通信模块层次:应用程序socket apiWS2_32.dllsocket irpAfd.systdi irpTcpip.sys回调函数接口各Ndis中间层过滤驱动回调函数接口小端口驱动中断交互操作网卡应用程序调用WS2_32.dll中的socket api,socket api在内部生成socket ...转载 2018-12-18 02:05:47 · 784 阅读 · 0 评论 -
[14]Windows内核情景分析 --- 文件系统
文件系统一台机器上可以安装很多物理介质来存放资料(如磁盘、光盘、软盘、U盘等)。各种物理介质千差万别,都配备有各自的驱动程序,为了统一地访问这些物理介质,windows设计了文件系统机制。应用程序要访问存储在那些物理介质上的资料时,无需直接访问,只需借助文件系统即可对其有效访问。各种物理介质的存储方式千差万别,文件系统则按照‘文件’的概念,把要存储的资料以文件为单位进行存放,然后,读取的时候也...转载 2018-12-18 02:05:58 · 701 阅读 · 0 评论 -
Win内核原理与实现学习笔记1-windows内核版本列表
原创 2016-03-01 16:34:25 · 1077 阅读 · 0 评论