Windows相关保护模式分析笔记(1)
首先声明本帖首发于赏金论坛,希望大家能多多关注这个正在成长的论坛www.sgoldcn.com,最近正在出一套编写操作系统雏形的教程http://www.sgoldcn.com/thread.php?fid=84,顺便整理了下保护模式的知识,逆向分析了下Windows的保护模式相关代码。
调试工具: vmware+windbg双机调试, bochs
vmware+windbg双机调试网上有很多资料,我这里就不说了(缺点是不能分析windows设置GDT,IDT的过程)
bochs我这里说下,大家可以去下载最新的版本的bochs,我没有制作bochs虚拟磁盘,比较麻烦,想到一个最简单的方法,直接使用xp2 winpe的ISO镜像,最新版的bochs不需要自己编写脚本,用bochs.exe可以直接生成配置文件
设置步骤如下:
1.双击bochs.exe设置虚拟机引导和磁盘
2.设置引导设备为CD-ROM
3.设置引导设备为*.iso镜像
点击save可以保存生成*.bxrc配置文件
用bochs主要是能看到一些硬件信息,相当于硬件调试器,但是从bochsdbg的输出结果来看bochs现在还没支持MSR指令,windbg无法观察内核设置分段,分页等代码,而bochs可以模拟硬件,能详尽分析这部分代码;所以我在分析时大部分用依赖与bochs.
(bochs的命令是兼容GDB,与windbg不同,我下了份源码,试着改下命令,发现找不到头绪,如果有牛人改好,请发出了分享下.)
做好配置文件*.bxrc可以使用bat脚本 "C:\Program Files\Bochs-2.4.6\bochsdbg" -q -f "D:\内核笔记\winpe XP.bxrc" 来启动调试器bochsdbg,bochs的命令可以在网上搜索下,有很多参考整理,bochs的文档是最好的指南.
Windows进入保护模式的步骤:
1. 分段准备GDT,加载GDT
2. 分页式寻址支持虚拟地址
一.保护模式分段寻址选择
如果未开启分页,任然沿用seg:offset方式寻址;
GDT(Global Descriptor Table Register,全局描述符表寄存器):描述符数组 有以下特点:
1、段寄存器中存放段选择子Selector
2、GDTR中存放着段描述符表的首地址
3、通过选择子根据GDTR中的首地址,就能找到对应的段描述符
4、段描述符中有段的物理首地址,就得到段在内存中的首地址
5、加上偏移量,就找到在这个段中存放的数据的真正物理地址。
寻址示意图如下:
分段寻址有一个重要的数据结构,GDT数组,在进入保护模式前准备好这个数组,由lgdt设置gdt
IDT(Interrupt Descriptor Table,中断描述符)也是类似于GDT的一个数组,是为了描述中断异常而设置的
这里我先不解释描述符(Descriptor),我们可以暂时理解为描述内存信息(段基地,段界限,段属性等)的数据结构.
(1.)bochs观察GDT表与IDT表
第一次打开bochsdbg,会在准备好BIOS时断下输入命令 c(contine)
代码:注意:上传附件及图片大小不得大于30M。
⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途。
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。复制成功




