3 可乐吧kaito

尚未进行身份认证

暂无相关简介

等级
TA的排名 10w+

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

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

2017-07-15 13:59:05

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

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

2017-07-13 00:05:45

将博客搬至CSDN

I need CSDN.

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,也就是Local DescriptorTable,局部描述符,它描述的和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]StrHello db "Hello, kaito!", 0AhHelloLen equ $ - StrHello[SECTION .text]global _start ;must be decleared for linker(ld)_start: ;tell linker entry pointmov edx, 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: Descriptor 0,             0,        

2017-06-21 22:51:21

启动Orange's的最简单OS

其实更准确的是山区引导程序书上的代码是org 07c00h ; 告诉编译器程序加载到7c00处mov ax, csmov ds, axmov es, axcall DispStr ; 调用显示字符串例程jmp $ ; 无限循环DispStr:mov ax, BootMessagemov bp, ax ; ES:BP = 串地址mov cx, 16 ; CX = 串长度mo

2017-06-21 22:51:18

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

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

2017-06-21 22:51:16

FIFO和线程的使用

做一个类似聊天的工具第一个程序的代码#include#include#include#include#include#include#include#includeint res, r_fd, s_fd;pthread_t th_r, th_w;int kflag = 0;void *thread_w(){int tmp;char p[1000];while

2017-06-21 22:51:13

linuxFIFO(有名管道)

FIFO(first in first out)最先被写入文件的字节总是最先被读出。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,即Memory ManagementUnit,内存管理单元。在处理器中,放在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

查看更多

勋章 我的勋章
    暂无奖章