x01.os.7 中,借助 freedos,学习了保护模式。但操作系统必须完成引导:boot, 加载内核:loader,kernel,进而管理process,memory,file等。

引导比较简单,开机启动时,CPU 采取硬的方式,直接把 BIOS 载入内存某处运行。这就是电脑启动时按 DEL 键可以看到的画面。此时,无硬盘可以,无内存则不可以。BIOS 是一个只读芯片,但我认为它仍有可写的部分,否则,启动盘设置的保存,就说不通。BIOS 退出时,它会检测启动盘 0 扇区的最后两个字节,是否为 0xAA55。如果是的,便把该扇区的 512 字节载入内存 0x7C00 处。以后的控制权,就交给了0x7C00 处。所谓的引导扇区,不过如此。这些设置,都是硬指标,没有讨价还价的余地。进入 0x7C00时,虽然只有512字节,但这并不妨碍构建 FAT12 格式的文件。方法如下:

       org 0x7C00

      jmp short l_start

      nop

%include"fat12.s"

字节实在太少,所以只能完成寻找加载 loader 的工作。进入 loader 后,虽可以多做一些事情,但没有必要,只需进行一些简单必要的设置,作为跳板,跳入 kernel 即可。必要设置,主要是对 kernel 内存地址 sel:entry_point 的一个整理。kernel 是 elf 格式,可与 C 交互。

让我们跟着于渊的脚步,看看进入 C 的运行效果图吧。

按下键盘,会产生一个中断,最后一行即是。

完整代码,可到 x01.Lab.download 中下载。

最新文章

  1. COGS439. [网络流24题] 软件补丁
  2. Entity Framework Code First (七)空间数据类型 Spatial Data Types
  3. Visual Studio多版本进行切换的研究
  4. dp水题 序列问题 (9道)
  5. 【转载】LoadRunner11下载以及详细破解说明
  6. WP8.1 Study17:网络之后台下载/上传及HttpClient
  7. 关于phpmyadmin #1045无法登陆服务器的问题
  8. Linux 命令 - grep: 正则搜索文本
  9. zabbix oracle监控插件orabbix部署安装
  10. org.gradle.process.internal.ExecException:
  11. android select选择器 checkbox改外观,button按下状态
  12. JS中的内存泄漏
  13. 源码篇:SDWebImage
  14. java爬虫--jsoup简单的表单抓取案例
  15. Flutter数据库Sqflite之增删改查
  16. 【maven】maven命令 package、install、deploy 的区别
  17. Submine Text 快捷键
  18. 如何优雅的封装一个DOM事件库
  19. centos6,python3,通过pip安装pycurl出现报错提示
  20. 从刷票了解如何获得客户端IP

热门文章

  1. 网上图书商城2--Category模块
  2. 设置MySQL允许外网访问
  3. 过去几个月出炉的30款最喜欢的 jQuery 插件
  4. 【CSS3】 理解CSS3 transform中的Matrix(矩阵)
  5. Hybrid框架UI重构之路:四、分而治之
  6. jquery对象和DOM对象的互相转换
  7. 每日一博 | 用 Ionic2 创建 App 启动页滑动欢迎界面
  8. SharePoint 2013 报:网站在改进过程中处于只读状态,对此给您带来的不便,我们深表歉意
  9. 如何排查sharepoint2010用户配置文件同步服务启动问题
  10. MSCRM 2011/2013/2015 修改显示记录数