全局描述符表(GDT)   在386平台各种保护措施中最重要的就是全局描述符表(GDT).GDT为内存的某些部分定义了基本的访问权限.我们可以使用GDT中的一个索引来生成段冲突异常, 让内核终止执行异常的进程.现代操作系统大多使用"分页"的内存模式来实现该功能, 它更具通用性和灵活性.GDT还定义了内存中的的某个部分是可执行程序还是实际的数据.GDT还可定义任务状态段(TSS).TSS一般在基于硬件的多任务处理中使用, 所以我们在此并不做讨论.需要注意的是TSS并不是启用多任务的唯一方…
中断描述符表(IDT)   中断描述符表(IDT)用于告诉处理器调用哪个中断服务程序(ISR)来处理异常或汇编中的"int"指令.每当设备完成请求并需要服务事, 中断请求也会调用IDT条目.异常和ISR将在下一节进行详细的说明.   每一项IDT都与GDT相似, 两者都有一个基地址, 一个访问标志, 而且都长64bits.这两类描述符表最主要的区别在于这些字段的含义: 在IDT中的基地址是中断时应调用的ISR的地址.IDT也没有边界(limit), 而是需要一个指定的段, 该段与给定的…
准备工作   内核开发是编写代码以及调试各种系统组件的漫长过程.一开始这似乎是一个让人畏惧的任务,但是并不需要大量的工具集来编写自己的内核.这个内核开发教程主要涉及使用GRUB将内核加载到内存中.GRUB需要被定向到受保护的二进制镜像中,这个镜像就是我们将要构建的内核.   使用本教程,你至少需要具备C语言基础,并且强烈推荐了解x86汇编知识,它允许你操作处理器中特定的寄存器.所以你至少需要一个可以生成32位编码的编译器,一个32位的链接器和一个能生成32位x86的汇编器.   对于硬件,你必须…
介绍   内核开发不是件容易的事,这是对一个程序员编程能力的考验.开发内核其实就是开发一个能够与硬件交互和管理硬件的软件.内核也是一个操作系统的核心,是管理硬件资源的逻辑.   处理器或是CPU是内核需要管理的最重要的系统资源之一.内核对其的管理体现在:给特定操作分配时间,并允许在另一个调度事件发生时中断任务或进程.也就是多任务处理(multitasking).多任务处理的实现方式有: 协作式多任务处理(cooperative multitasking):当程序自身想要放弃处理下一个可执行进程或…
目录 创建main函数和链接C文件 PS: 下面是我自己写的 Win10安装gcc编译器 本节教程对应的Linux下的编译脚本 _main的问题 创建main函数和链接C文件   一般C语言使用main()函数作为程序的入口点, 为了符合我们平时的编程习惯, 这里我们也使用main()函数作为C代码的入口点, 并在"start.asm"文件中添加中断服务程序来调用C函数.   在这一节教程,我们将尝试创建一个"main.c"文件和一个包含常用函数原型的头文件&quo…
目录 内核初步 内核入口 链接脚本 汇编和链接 PS: 下面是我自己写的 64位Linux下的编译脚本 内核初步   在这节教程, 我们将深入研究一些汇编程序, 学习创建链接脚本的基础知识以及使用它的原因.最后, 我们将学习如何使用batch(批处理)文件自动汇编.编译和链接这个最基本的受保护模式下的内核.本教程假定你已经安装了NASM和GCC, 并且了解一点点x86汇编语言. 内核入口   内核的入口点是当引导程序(bootloader)调用内核时最先执行的代码段.这段代码一直以来几乎都是使用…
中断服务程序(ISR)   中断服务程序(ISR)用于保存当前处理器的状态, 并在调用内核的C级中断处理程序之前正确设置内核模式所需的段寄存器.而工作只需要15到20行汇编代码来处理, 包括调用C中的处理程序.我们还需要将IDT条目指向正确的ISR以正确处理异常.   异常是导致处理器无法正常执行的特殊情况, 比如除以0结果是未知数或者非实数, 因此处理器会抛出异常, 这样内核就可以阻止进程或任务引起任何问题.如果处理器发现程序正尝试访问不允许其访问的内存, 则会引起一般保护错误.当你设置内存页…
打印到屏幕   现在, 我们需要尝试打印到屏幕上.为此, 我们需要管理屏幕滚动, 如果能允许使用不同的颜色就更好了.好在VGA视频卡为我们提供了一片内存空间, 允许同时写入属性字节和字符字节对, 可以更简单地在屏幕上显示信息.VGA控制器负责自动绘制屏幕上的更新.屏幕滚动由内核软件来管理.从技术上讲, 这将是我们写的第一个驱动程序.   如上所述, 文本空间只是我们地址空间的一块存储区域, 这片缓冲区位于物理内存的0xB800地址, 缓冲区的数据类型为"short"类型, 这意味着这片…
系列目录 1.Taurus.MVC WebAPI  入门开发教程1:框架下载环境配置与运行. 2.Taurus.MVC WebAPI 入门开发教程2:添加控制器输出Hello World. 3.Taurus.MVC WebAPI 入门开发教程3:路由类型和路由映射. 4.Taurus.MVC WebAPI 入门开发教程4:控制器方法及参数定义.获取及基础校验属性[Require]. 5.Taurus.MVC WebAPI 入门开发教程5:控制器安全校验属性[HttpGet.HttpPost][A…
来源:https://www.cnblogs.com/longintchar/p/5224406.html 在进入保护模式之前,我们先要学习一些基础知识.今天我们看一下全局描述符表(Global Descriptor Table, 简称GDT). 同实模式一样,在保护模式下,对内存的访问仍然使用段地址加偏移地址.但是,在保护模式下,在每个段能够访问之前,必须先登记.这就好比像C语言中,“对变量的使用必须先定义”一样. 每个段在能够使用之前,都要为这个段建立一个描述符.每个描述符占8个字节,这些描…
写在前面 添油加醋系列第二弹--剖析GDT 头文件:https://github.com/bajdcc/MiniOS/blob/master/include/gdt.h 实现:https://github.com/bajdcc/MiniOS/blob/master/src/kernel/gdt.c 话说C语言的话除了刷刷OJ外,就是用来实现操作系统这个大头了.C语言比C++少了很多很多臃肿的语法特性,写起来非常优美(至少写操作系统是这样的).虽说C++有许多的奇技淫巧,一个算法有N种实现方法,但…
http://www.cnblogs.com/liloke/archive/2011/12/21/2296004.html 最近在看<orange’s>一书,有点想自己写一个轻量级OS的想法,设计和架构上会参照orang’s和Linux 0.11 kernel. 这个网站,上面的资料对于我这样的新手无疑是一份宝贵的财富啊.它详细介绍了内核程序必不可少的几大模块,并且对于每一个模块都有一些代码示例.看着文章代码,边做边学,真是一件愉快的事情 本来还想翻译成中文献给大家,不过google了一下,已…
/stdfx.h文件 //Ring0环的程序 //测试环境VS2005 #ifndef _WIN32_WINNT // Allow use of features specific to Windows XP or later. #define _WIN32_WINNT 0x0501 // Change this to the appropriate value to target other versions of Windows. #endif #ifdef __cplusplus exte…
前言: Taurus.MVC 微服务版本已经发布了:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单. 以前都是框架发布时写点相关功能点的文章,没有形成系列. 因此,计划补充些详细的入门开发教程,本系列教程目录如下: 1.Taurus.MVC WebAPI  入门开发教程1:框架下载环境配置与运行. 2.Taurus.MVC WebAPI 入门开发教程2:添加控制器输出Hello World. 3.Taurus.MVC WebAPI 入门开发教程3…
系列目录 1.Taurus.MVC WebAPI  入门开发教程1:框架下载环境配置与运行. 2.Taurus.MVC WebAPI 入门开发教程2:添加控制器输出Hello World. 3.Taurus.MVC WebAPI 入门开发教程3:路由类型和路由映射. 4.Taurus.MVC WebAPI 入门开发教程4:控制器方法及参数定义.获取及基础校验属性[Require]. 5.Taurus.MVC WebAPI 入门开发教程5:控制器安全校验属性[HttpGet.HttpPost][A…
系列目录 1.Taurus.MVC WebAPI  入门开发教程1:框架下载环境配置与运行. 2.Taurus.MVC WebAPI 入门开发教程2:添加控制器输出Hello World. 3.Taurus.MVC WebAPI 入门开发教程3:路由类型和路由映射. 4.Taurus.MVC WebAPI 入门开发教程4:控制器方法及参数定义.获取及基础校验属性[Require]. 5.Taurus.MVC WebAPI 入门开发教程5:控制器安全校验属性[HttpGet.HttpPost][A…
系列目录 1.Taurus.MVC WebAPI  入门开发教程1:框架下载环境配置与运行. 2.Taurus.MVC WebAPI 入门开发教程2:添加控制器输出Hello World. 3.Taurus.MVC WebAPI 入门开发教程3:路由类型和路由映射. 4.Taurus.MVC WebAPI 入门开发教程4:控制器方法及参数定义.获取及基础校验属性[Require]. 5.Taurus.MVC WebAPI 入门开发教程5:控制器安全校验属性[HttpGet.HttpPost][A…
系列目录 1.Taurus.MVC WebAPI  入门开发教程1:框架下载环境配置与运行. 2.Taurus.MVC WebAPI 入门开发教程2:添加控制器输出Hello World. 3.Taurus.MVC WebAPI 入门开发教程3:路由类型和路由映射. 4.Taurus.MVC WebAPI 入门开发教程4:控制器方法及参数定义.获取及基础校验属性[Require]. 5.Taurus.MVC WebAPI 入门开发教程5:控制器安全校验属性[HttpGet.HttpPost][A…
系列目录 1.Taurus.MVC WebAPI  入门开发教程1:框架下载环境配置与运行. 2.Taurus.MVC WebAPI 入门开发教程2:添加控制器输出Hello World. 3.Taurus.MVC WebAPI 入门开发教程3:路由类型和路由映射. 4.Taurus.MVC WebAPI 入门开发教程4:控制器方法及参数定义.获取及基础校验属性[Require]. 5.Taurus.MVC WebAPI 入门开发教程5:控制器安全校验属性[HttpGet.HttpPost][A…
系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 本系列第一篇:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单. Taurus.MVC 微服务框架 入门开发教程:项目集成:1.服务端:注册中心.网关(提供可运行程序下载). Taurus.MVC 微服务框架 入门开发教程:项目集成:2.客户端:ASP.NET Core(C#)项目集成:应用中心. Taurus.MVC 微服务框架 入门开发教程:项目集成:3.…
GDT全局描述符表 什么是GDT全局描述符表 GDT全称为Global Descriptor Table,全局描述符表. 保护模式的寻址方式不在使用寄存器分段的方式直接寻址方式了.而采用的是使用GDT(全局分段描述表)来寻址.从而使用更多的内存地址. 创建GDT全局描述符表使用到一个48位的寄存器:GDTR寄存器. 1)首先,在内存中划分一些内存段,并且每个内存段赋予一个索引. 2)然后,使用lgdt指令,设置GDT的索引和表信息的内存地址到GDTR寄存器. 3)进入保护模式,指令跳转,从实模式…
在进入保护模式之前,我们先要学习一些基础知识.今天我们看一下全局描述符表(Global Descriptor Table, 简称GDT). 同实模式一样,在保护模式下,对内存的访问仍然使用段地址加偏移地址.但是,在保护模式下,在每个段能够访问之前,必须先登记.这就好比像C语言中,"对变量的使用必须先定义"一样. 每个段在能够使用之前,都要为这个段建立一个描述符.每个描述符占8个字节,这些描述符集中存放在内存的某个区域,一个挨着一个,就构成了一张"表". 80x86中…
目录 1 Linux-RT内核简介 3 2 Linux系统实时性测试 3 3 rt_gpio_ctrl案例 10 4 rt_input案例 15 本文为Linux-RT内核应用开发教程的第一章节--Linux-RT内核简介.Linux系统实时性测试,欢迎各位阅读!本期用到的案例板子是创龙科技旗下的A40i工业级别开发板,是基于全志科技A40i处理器设计,4核ARM Cortex-A7的高性能低功耗国产开发板,每核主频高达1.2GHz. 基于全志科技A40i开发板,其接口资源丰富,可引出双路网口.…
PHP是一种解释型的语言,对于用户而言,我们精心的控制内存意味着easier prototyping和更少的崩溃!当我们深入到内核之后,所有的安全防线都已经被越过,最终还是要依赖于真正有责任心的软件工程师来保证系统的稳定运行. 1.线程安全宏定义 在TSRM/TSRM.h文件中有如下定义 #define TSRMLS_FETCH()       void ***tsrm_ls = (void ***) ts_resource_ex(0, NULL)#define TSRMLS_FETCH_FRO…
一.项目简介 贪吃蛇是一个很经典的游戏,也很适合用来学习.本教程将和大家一起做一个Android版的贪吃蛇游戏. 我已经将做好的案例上传到了应用宝,无病毒.无广告,大家可以放心下载下来把玩一下.应用宝不允许重名,我取名叫“快乐贪吃蛇”.应用宝链接:http://sj.qq.com/myapp/detail.htm?apkName=net.chengyujia.happysnake 同时我也将本游戏的源代码上传到了GitHub,欢迎大家Fork.GitHub链接:https://github.co…
在Senparc.Weixin.dll v4.5.7版本开始,我们提供了Web代理功能,以方便在受限制的局域网内的应用可以顺利调用接口. 有关的修改都在Senparc.Weixin/Utilities/HttpUtility/RequestUtility.cs: #region 代理 private static WebProxy _webproxy = null; /// <summary> /// 设置Web代理 /// </summary> /// <param nam…
Senparc.Weixin.MP SDK已经涵盖了微信6.x的所有公共API. 整个项目的源代码以及已经编译好的程序集可以在这个项目中获取到:https://github.com/JeffreySu/WeiXinMPSDK PS:由于微信API以及Senparc.Weixin SDK一直在不断升级更新,最新的代码及Demo以上面的github中的源代码为准. 我们现在从无到有建立一个ASP.NET MVC项目,来看一下如何与微信进行对接(Webforms原理也都是一样,只不过把Controll…
从这篇文章中我们已经了解了微信公众平台消息传递的方式,这种方式有一个先天的缺陷:不同用户的请求都来自同一个微信服务器,这使得常规的Session无法使用(始终面对同一个请求对象,况且还有对方服务器Cookie是否能保存的问题). 这就要求我们自己建立一套独立的对话上下文请求机制. 上一篇<Senparc.Weixin.MP SDK 微信公众平台开发教程(六):了解MessageHandler>中我们了解到,Senparc.Weixin.MP SDK提供了一套非常便捷的消息处理机制,这套机制上面…
在<Senparc.Weixin.MP SDK 微信公众平台开发教程(八):通用接口说明>中,我介绍了获取AccessToken(通用接口)的方法. 在实际的开发过程中,所有的高级接口都需要提供AccessToken,因此我们每次在调用高级接口之前,都需要执行一次获取AccessToken的方法,例如: var accessToken = AccessTokenContainer.TryGetAccessToken(appId, appSecret); 或者当你对appId和appSecret…
今天一波三折,承受了超出预料的压力和煎熬,最后还是决定继续放出我的更新教程.我想我一没有泄露公司的代码,二没有提供泄露开发工具下载,只是从程序猿角度写了篇开发日志.我已经做好了最坏的准备,就算放弃这份工作,也会把完成的教程交给「名片盒」的团队继续更新发布下去!做了就绝不后悔!只是博卡君水平有限,文章还请各位多包容. 以上!开始吧: 小提示: http://wxopen.notedown.cn/ 这里面复刻了微信小程序的 api 第三章:微信小程序项目结构以及配置 找到创建的 demo 文件夹,把…