2 可乐吧kaito

尚未进行身份认证

暂无相关描述

等级
TA的排名 11w+

在ELF格式内核中设置GDT、IDT等相关

快一个多月了,一直想要在ELF格式内核中实现中断,参考的是两本书,一本是于渊的orange’s,另一本是川合秀实的30天自制。。。前期,使用的是于渊的方法进入保护模式,加载并运行ELF内核;进入ELF内核后,变使用川合秀实的方式实现了图形界面(仅仅只是显示图形功能),发现各种错误(由其是中断向量号为13的#GP错误,常规保护异常)因为于渊的方法是,在loader里面加载ELF,然后跳转到ELF执行,

2017-07-15 13:59:05

通过retf和调用门实现特权级转换

不打算按别人的思路来,因为在我学的过程中上网查,发现网上的博客都是互相抄的,最终还是抄书的。Intel64和IA-32架构处理器在进入保护模式之后,就会有一些列保护机制。其中出现了三个特别重要的东西:CPL、DPL、RPL。CPL表示当前正在执行程序的特权级,它保存在cs段寄存器里面;DPL表示某个段的特权级,保存在这个段对应的段描述符中;RPL表示请求访问

2017-07-13 00:05:45

将博客搬至CSDN

IneedCSDN.

2017-06-21 22:51:45

ELF Format

Format"TITLE="ELF Format"/>

2017-06-21 22:51:40

在保护模式下启动分页机制,并且使…

分页是在应用程序对内存的需要越来越大的情况下出现的,为了满足应用程序对内存可寻址地址超过4MB的需要,在80386开始就加入了分页机制。分页机制是针对某一个任务的,或者更准确的说是针对某一个段的。我们在某一个段使用分页机制,就要把对应的页目录表基址给cr3,从而开始使用该段对应的虚拟地址;当我们切换任务,或想要跳转到另外一个段的时候,需要从新加载cr3。每当把一个任务的cr3加载好后,该任务

2017-06-21 22:51:37

关于LDT的使用

看了书上和网上说的关于LDT的内容,觉得网上许多博客对LDT的认识都不准确,博客内容也要么是抄书上的内容,要么抄别人的博客。LDT,也就是LocalDescriptorTable,局部描述符,它描述的和GDT一样,也是一个段。这样理解,我觉得往后越学越容易误会。我觉得不应该先说LDT,应该先说跳转入保护模式后,我们要如何执行多个任务。假设我们现在已经进入保护模式了,我们需要在保护模

2017-06-21 22:51:34

加载setup后,进入保护模式

太兴奋了,先上传代码和效果图已经实现了,通过引导扇区加载setup.bin,又在setup里面进入了保护模式,并能够正常显示字符串kOS的源代码

2017-06-21 22:51:32

在ubuntu下用nasm和gcc的ld链接程…

我们先写一个.asm文件[SECTION.data]StrHellodb"Hello,kaito!",0AhHelloLenequ$-StrHello[SECTION.text]global_start;mustbedeclearedforlinker(ld)_start:;telllinkerentrypointmovedx,Hel

2017-06-21 22:51:29

用软盘引导扇区加载.bin文件到内存…

在x86平台,如果我们的汇编程序比较小,例如只显示一个字符串,则我们用软盘的引导扇区(占一个扇区)就够了;但是我们的程序以后会越写越大,会超出一个扇区的范围(512字节),这时我们就需要改变策略,我们先把程序分成两个部分,第一部分是引导程序,第二部分是我们要真正操作的核心程序。我们把第二部分存到软盘的某个地方,然后通过第一部分的引导程序把第二部分程序加载到内存中运行。这样我们的核心程序就可以写得很

2017-06-21 22:51:26

再是用数据段的情况下,向显存发送…

之前傻逼了,上一篇里面的注说的没有错【注】之前我把书中光盘的内容直接拿来编译,发现编译不通过,我也不知道为什么,后来我就按书上的代码改,没有用堆栈,但是用了数据段。数据段的数据在初始化时,是要把段首地址存在ds的,然后用数据段的数据就用偏移就可以,只是不知道为什么,我在代码段引用数据段的内容时,要么说是无效的有效地址,要么显示的全'S',所以索性先不用数据段,直接把字符串存在代码段,先这样把显存

2017-06-21 22:51:24

直接给显存发送数据,显示字符串(…

这是在不用数据段的情况下,就是这个字符串不是保存在数据段,而是保存在代码段(因为如果要使用数据段,我还不会,书上使用的又是使用代码段的,一模一样的代码,编译却通不过)使用往显存发送数据的方式,就是直接把字符显存所在位置显存所在的段基址是0B8000h,假若[SECTION.gdt]LABEL_GDT:Descriptor0,       0,     

2017-06-21 22:51:21

启动Orange's的最简单OS

其实更准确的是山区引导程序书上的代码是org07c00h;告诉编译器程序加载到7c00处movax,csmovds,axmoves,axcallDispStr;调用显示字符串例程jmp$;无限循环DispStr:movax,BootMessagemovbp,ax;ES:BP=串地址movcx,16;CX=串长度mo

2017-06-21 22:51:18

一个父进程创建多个子进程,有些需…

在Linux下我们可以用fork函数创建一个子进程,但是当我们需要在一个父进程下创建多个子进程时,有些需要注意的地方。假设我们用如下代码在一个父进程下创建两个子进程:voidmain(){pid_tpid1,pid2;pid1=fork();pid2=fork();if(pid1==0){printf("Thisisthefirstchildproces

2017-06-21 22:51:16

FIFO和线程的使用

做一个类似聊天的工具第一个程序的代码#include#include#include#include#include#include#include#includeintres,r_fd,s_fd;pthread_tth_r,th_w;intkflag=0;void*thread_w(){inttmp;charp[1000];while

2017-06-21 22:51:13

linuxFIFO(有名管道)

FIFO(firstinfirstout)最先被写入文件的字节总是最先被读出。FIFO在文件系统中不拥有磁盘块,打开的FIFO文件时一个与内核缓冲区相关的区域,用来存放两个进程之间交换的数据。且FIFO的文件名包含在系统的,目录树当中,因此任何进程都可以访问这个FIFO文件。FIFO(有名管道)可以用于任意两个进程之间的数据交换,而且管道的读端和写端也以文件的方式给出(只不过这个文

2017-06-21 22:51:10

linux管道(无名管道)

首先管道是进程之间的一个单向数据流,它的数据流向由内核管理,只能从一个进程流向另外一个进程,一个进程向管道写入数据,另外一个进程从这个管道读取数据。在使用管道(无名管道)时,只能用在父子进程或者亲属进程之间,若要用在任意进程之间则需要使用FIFO(有名管道)如图进程AB通过管道进行数据交换。进程A通过管道的“写端”往管道里面写入数据,进程B通过“读端”从管道里面读取数据。而在系统调用

2017-06-21 22:51:07

linux进程通信第一次回顾

进程通信,是说进程之间同步和交换数据。虽然通过文件加锁可以实现同步,但是代价很高因为它需要访问磁盘文件系统。Unix系统提供的进程间通信的基本机制:1.管道。管道又分为无名管道和有名管道,有时直接把无名管道简称为管道,把有名管道说成是FIFO。2.信号量。3.消息。4.共享内存区。允许进程通过共享内存块来交换信息。在共享大量数据时是效率最高的。5.套接字(socket)。允许不同计算

2017-06-21 22:51:04

s3c6410的MMU使用(用段的方式转化…

1.mmu的介绍mmu,即MemoryManagementUnit,内存管理单元。在处理器中,放在cpu和内存之间,有两个作用(1)转换虚拟内存(2)设置程序对内存的访问(在裸机阶段,对于处在不同域domain的虚拟地址,可设置不同的权限)2.s3c6410中的mmu在6410中,mmu的虚拟地址到物理地址的转化如图,可采用3种方式按照虚拟地址的[31:20]位的最后两位,当为

2017-06-21 22:51:01

Ubuntu下用dnw下载到OK6410开发板

https://github.com/Qunero/dnw4linux就是这篇,里面的源码可以用,就是他给的先删掉,自己重新编译出dnw和secbulk.ko,才可以用。弄了我好久,蓝过

2017-06-21 22:50:59

关于Linux重定向输入输出

Linux默认的标准输入来自于键盘,标准输出输出到屏幕上但是通过重定向,我们可以修改对于一个shell命令的输入输出(即不是从键盘输入,或不是从屏幕输出)但是要注意的是,对于输入输出都必须是字符流,而不能是其他像路径这样的东西先做重定向输出,比如我们要输出到一个文件里面,用> 然后是重定向输出,用我先写了一个path.txt,内容如下然后用ls结果显示的却是当前

2017-06-21 22:50:56

查看更多

勋章 我的勋章
    暂无奖章