《番茄花园-一章概述》由会员分享,可在线阅读,更多相关《番茄花园-一章概述(20页珍藏版)》请在金锄头文库上搜索。
1、番茄花园-一章概述Stillwatersrundeep.流静水深流静水深,人静心深人静心深Wherethereislife,thereishope。有生命必有希望。有生命必有希望提纲提纲n n80386保护模式简介n nBochs简介n n实验环境的搭建80386保护模式简介保护模式简介n n回顾实模式n n实模式下的寄存器集合实模式下的寄存器集合n n通用寄存器通用寄存器n n段寄存器段寄存器n n状态和控制寄存器状态和控制寄存器n n寻址空间与寻址方式寻址空间与寻址方式n n寻址空间寻址空间n n实际物理地址实际物理地址 = = (段寄存器(段寄存器 4 4) + + 偏移地址偏移地址n
2、nMOV AXMOV AX,ES:1200HES:1200Hn nCSCS0x0000: IP=0x7c00 0x0000: IP=0x7c00 和和CSCS0x0700: IP=0x0c00 0x0700: IP=0x0c00 以及以及 CS=0x07c0: IP=0x0000 CS=0x07c0: IP=0x0000所寻址的地址是完全相所寻址的地址是完全相同的!同的!80386保护模式简介(续)保护模式简介(续)n n回顾实模式n n实模式下的中断实模式下的中断n n中断向量表存放在物理内存开始的位置(中断向量表存放在物理内存开始的位置(0x0000-0x0000-0x03ff0x03ff
3、)n n总共最多可以有总共最多可以有256256个中断向量个中断向量n n00h-04h 00h-04h 号中断向量为系统专用号中断向量为系统专用n n08h-0fh 08h-0fh 硬件中断硬件中断(8259A(8259A使用使用) )n n10h-1fh BIOS10h-1fh BIOS使用使用n n20h-3fh DOS20h-3fh DOS使用使用 如常用的如常用的 int 21h int 21hn n40h-ffh 40h-ffh 用户使用用户使用80386保护模式简介(续)保护模式简介(续)n n一个实模式下用户程序的一个实模式下用户程序的例子例子n n各个段在物理上必须是连各个段
4、在物理上必须是连续的续的n n装载程序在将程序装入时装载程序在将程序装入时需要按照具体的装载位置需要按照具体的装载位置设置设置CSCS、DSDS、SSSS80386保护模式简介(续)保护模式简介(续)n n实模式系统存在的问题n n安全性问题安全性问题n n程序采用物理地址来实现访存功能,而无法实现对程序采用物理地址来实现访存功能,而无法实现对任务的代码和数据的保护任务的代码和数据的保护n n一个程序可以通过改变段寄存器和偏移寄存器修改一个程序可以通过改变段寄存器和偏移寄存器修改不属于自己的代码或者数据,甚至操作系统不属于自己的代码或者数据,甚至操作系统n n分段机制本身的问题分段机制本身的问
5、题n n段必须是连续的,从而无法利用零碎的空间段必须是连续的,从而无法利用零碎的空间n n段的大小有限制,从而限制了代码的规模段的大小有限制,从而限制了代码的规模80386保护模式简介(续)保护模式简介(续)n n保护模式带来的变化n n保护模式下的寄存器保护模式下的寄存器n n通用寄存器(从通用寄存器(从1616位扩展到位扩展到3232位)位)n nEAXEAX、EBXEBX、ECXECX、EDXEDX、ESIESI、EDIEDI、EBPEBP、ESPESPn n段寄存器(维持段寄存器(维持1616位)位)n nCSCS、DSDS、SSSS、ESES、FSFS、GSGSn n状态和控制寄存器
6、(状态和控制寄存器(3232位)位)n nEFLAGSEFLAGS、EIPEIP、CR0CR0、CR1CR1、CR2CR2、CR3CR3n n系统地址寄存器系统地址寄存器n nGDTRGDTR、IDTRIDTR、TRTR、LDTRLDTRn n调试与测试寄存器调试与测试寄存器80386保护模式简介(续)保护模式简介(续)80868086的寄存器的寄存器8038680386的寄存器的寄存器通用寄存器通用寄存器AXAX、BXBX、CXCX、DXDX、SPSP、BPBP、DIDI、SISIEAXEAX、EBXEBX、ECXECX、EDXEDX、ESIESI、EDIEDI、EBPEBP、ESPESP段
7、寄存器段寄存器CSCS、DSDS、SSSS、ES ES CSCS、DSDS、SSSS、ESES、FSFS、GS GS 段描述符寄存器段描述符寄存器无无对程序员不可见对程序员不可见状态和控制寄存状态和控制寄存器器FLAGS FLAGS 、IPIPEFLAGSEFLAGS、EIPEIP、CR0CR0、CR1CR1、CR2CR2、CR3CR3系统地址寄存器系统地址寄存器无无GDTRGDTR、IDTRIDTR、TRTR、LDTRLDTR调试寄存器调试寄存器无无DR0-DR7DR0-DR7测试寄存器测试寄存器无无TR0-TR7TR0-TR780386保护模式简介(续)保护模式简介(续)n n寻址方式的变
8、化寻址方式的变化n n在保护模式下,分段机制是利用一个称作段选择子的在保护模式下,分段机制是利用一个称作段选择子的偏移量到全局描述符表中找到需要的段描述符,而这偏移量到全局描述符表中找到需要的段描述符,而这个段描述符中就存放着真正的段的物理首地址,然后个段描述符中就存放着真正的段的物理首地址,然后再加上偏移地址量便得到了最后的物理地址。再加上偏移地址量便得到了最后的物理地址。n n一般保护模式段式寻址可用一般保护模式段式寻址可用xxxxxxxx:yyyyyyyyyyyyyyyy表示。其表示。其中中xxxxxxxx表示索引,也就是段选择子,是表示索引,也就是段选择子,是1616位的;位的;yyy
9、yyyyyyyyyyyyy是偏移量,是是偏移量,是3232位的。位的。n n段选择子(段选择子(xxxxxxxx)为段寄存器,如)为段寄存器,如CSCS、DSDS、SSSS、ESES、FSFS、GSGS;偏移量(;偏移量(yyyyyyyyyyyyyyyy)是一个)是一个3232位寄存器,如位寄存器,如ESIESI、EDIEDI、EBPEBP、ESPESP。80386保护模式简介(续)保护模式简介(续)n n8038680386以及以后的处理器专门设计了一个寄存器以及以后的处理器专门设计了一个寄存器GDTRGDTR(Global Descriptor Table RegisterGlobal D
10、escriptor Table Register),专门),专门用于存储全局描述符表在内存中存放的位置。用于存储全局描述符表在内存中存放的位置。80386保护模式简介(续)保护模式简介(续)n n段描述符段描述符n n每个描述符为每个描述符为8 8个字节(个字节(88886464位)位)n n代码段和数据段的描述符代码段和数据段的描述符段基址为2,3,4,7字节,共32位。段限长为0,1以及6字节的低四位,共20位,段限长即段最大长度,与属性G共同确定。G = 0时描述符中的20位段限长为实际段限长,最大限长为1MB(0FFFFFh)。G = 1则 32位段限长为描述符中的20位乘以4KB,即
11、段限长左移 12位后加上FFFH,最大限长为 4GB。80386保护模式简介(续)保护模式简介(续)n n段描述符的属性段描述符的属性n nD/BD/B:对于不同类型段含义不同。:对于不同类型段含义不同。n n在可执行代码段中,这一位叫做在可执行代码段中,这一位叫做D D位,位,D = 1D = 1使用使用3232位地址和位地址和32/832/8位操作位操作数,数,D = 0D = 0使用使用1616位地址和位地址和16/816/8位操作数。位操作数。n n在向下扩展的数据段中,这一位叫做在向下扩展的数据段中,这一位叫做B B位,位,B = 1B = 1段的上界为段的上界为4GB4GB,B =
12、 0B = 0段的上界为段的上界为64KB64KB。n n在描述堆栈段的描述符中,这一位叫做在描述堆栈段的描述符中,这一位叫做B B位,位,B = 1B = 1使用使用3232位操作数,堆位操作数,堆栈指针用栈指针用ESPESP,B = 0B = 0使用使用1616位操作数,堆栈指针用位操作数,堆栈指针用SPSP。n nAVLAVL:Available and Reserved BitAvailable and Reserved Bit,通常设为,通常设为0 0。n nP P:存在位,:存在位,P = 1P = 1表示段在内存中。表示段在内存中。n nDPLDPL:描述符特权级,取值:描述符特
13、权级,取值0 30 3共共4 4级。级。0 0特权级为最高,而特权级为最高,而3 3特权级特权级为最低,表示访问该段时为最低,表示访问该段时CPUCPU所需处于的最低特权级,我们在后面会所需处于的最低特权级,我们在后面会详细讨论特权级的问题。详细讨论特权级的问题。n nS S:描述符类型标志,:描述符类型标志,S = 1S = 1表示代码段或者数据段;表示代码段或者数据段;S = 0S = 0表示系统段表示系统段(TSSTSS、LDTLDT)和门描述符。)和门描述符。80386保护模式简介(续)保护模式简介(续)n n描述符类型描述符类型n nTYPETYPE和和S S结合使用,可以表示的描述
14、符类型有:代码段、数据段、结合使用,可以表示的描述符类型有:代码段、数据段、TSSTSS、LDTLDT、中断门(、中断门(Interrupt GateInterrupt Gate)、陷阱门()、陷阱门(Trap GateTrap Gate)、调)、调用门(用门(Call GateCall Gate)、任务门()、任务门(Task GateTask Gate)。)。TYPE说明十进制值EWA数据段00000只读10001只读,已访问20010读/写30011读/写,已访问40100只读,向下扩展50101只读,向下扩展,已访问60110读/写,向下扩展70111读/写,向下扩展,已访问当当当当S
15、 = 1S = 1,TYPE 8TYPE 8时时时时TYPE说明十进制值CRA代码段 8 1 0 0 0只执行 9 1 0 0 1只执行,已访问 10 1 0 1 0执行/读 11 1 0 1 1执行/读,已访问 12 1 1 0 0只执行,一致 13 1 1 0 1只执行,一致,已访问 14 1 1 1 0执行/读,一致 15 1 1 1 1执行/读,一致,已访问当当当当S = 1S = 1,TYPE 8TYPE 8时时时时80386保护模式简介(续)保护模式简介(续)n nHello world在实模式下的实现n nHello world在保护模式下的实现80386保护模式简介(续)保护模
16、式简介(续)n n保护模式下的中断管理保护模式下的中断管理n n在保护模式中,中断的类型可以分为两种。一种是硬件中断在保护模式中,中断的类型可以分为两种。一种是硬件中断(Interrupts)(Interrupts),一种是软件中断,一种是软件中断(Exceptions)(Exceptions),又称为异常。,又称为异常。n n其中硬件中断在系统中是由外部事件所引起的,如:一次其中硬件中断在系统中是由外部事件所引起的,如:一次I/OI/O操作操作的结束。其产生与的结束。其产生与CPUCPU当前所执行的指令没有关系。从是否能够当前所执行的指令没有关系。从是否能够被屏蔽来划分,可将其分为两类:可屏
17、蔽中断与不可屏蔽中断。被屏蔽来划分,可将其分为两类:可屏蔽中断与不可屏蔽中断。其中前者由其中前者由CPUCPU的的INTRINTR引脚接收信号,后者由引脚接收信号,后者由NMINMI引脚接收信号。引脚接收信号。n n我们可以通过我们可以通过CLICLI和和STISTI指令来设置指令来设置EFLAGSEFLAGS寄存器的寄存器的IFIF位,如果位,如果这一位被清除,则这一位被清除,则CPUCPU会禁止外部中断传递信号给会禁止外部中断传递信号给INTRINTR引脚,这引脚,这样便屏蔽了可屏蔽中断,但是这对于样便屏蔽了可屏蔽中断,但是这对于NMINMI引脚不起作用,因此无引脚不起作用,因此无法屏蔽不
18、可屏蔽中断。法屏蔽不可屏蔽中断。n n异常是在异常是在CPUCPU执行指令期间遇到非法指令所产生的,根据是由是执行指令期间遇到非法指令所产生的,根据是由是否可恢复和恢复点位置不同又可将异常划分为三种。它们是故障否可恢复和恢复点位置不同又可将异常划分为三种。它们是故障(Fault),(Fault),陷阱陷阱(Trap)(Trap)和中止和中止(Abort)(Abort)。n n在保护模式下中断向量表的基地址存放在在保护模式下中断向量表的基地址存放在IDTRIDTR寄存器中;寄存器中;80386保护模式简介(续)保护模式简介(续)n n安全性问题安全性问题n nx86x86平台平台CPUCPU有有
19、0 0、1 1、2 2、3 3四个特权级,其中四个特权级,其中level0level0是最是最高的特权级,可以执行所有指令;高的特权级,可以执行所有指令;n n而而level3level3则是最低的特权级,只能执行算术逻辑指令,则是最低的特权级,只能执行算术逻辑指令,很多特殊的操作(如很多特殊的操作(如CPUCPU模式转换以及模式转换以及I/OI/O操作指令)操作指令)都不能在这个级别下进行。都不能在这个级别下进行。n n现代操作系统在实际中往往只需使用到现代操作系统在实际中往往只需使用到level0level0和和level3level3两两个特权级,具体的就是操作系统内核运行时系统处于个特
20、权级,具体的就是操作系统内核运行时系统处于level0level0(即(即CSCS寄存器的末两位为寄存器的末两位为0000),而用户程序运行),而用户程序运行是系统是处于是系统是处于level3level3的(即的(即CSCS的末两位为的末两位为1111)。)。n n将在第五章进行详细讲述。将在第五章进行详细讲述。Bochs简介简介n nVMWare虚拟机系统(RHEL5.1 i386 Server)的安装、Bochs系统(bochs-20090704)的安装;n n认识配置文件中参数的使用;n n几个使用Bochs使用系统的例子。Bochs简介(续)简介(续)n n利用利用BochsBoch
21、s做系统调试做系统调试n n常用调试命令常用调试命令n nc/continue c/continue 表示继续执行表示继续执行n ns/step/stepi count s/step/stepi count 表示继续执行表示继续执行countcount条指令,如果没有设定条指令,如果没有设定countcount的值,则执行一条指令的值,则执行一条指令n nCtrl-C Ctrl-C 停止执行,返回命令行停止执行,返回命令行n nCtrl-D Ctrl-D 如果命令行此时是空的则退出如果命令行此时是空的则退出BochsBochs模拟模拟n nq/quit/exit q/quit/exit 退出调
22、试和执行退出调试和执行n n 断点设置命令断点设置命令n nvb/vbreak segvb/vbreak seg:off off 用虚拟地址来设置断点,其中用虚拟地址来设置断点,其中segseg表示段基表示段基址,而址,而offoff是偏移地址是偏移地址n nlb/lbreak addr lb/lbreak addr 用线性地址来设置断点,用线性地址来设置断点,addraddr表示线性地址表示线性地址n nb/break/pb/pbreak addr b/break/pb/pbreak addr 用物理地址来设置断点,用物理地址来设置断点,addraddr表示物理表示物理地址地址Bochs简介
23、(续)简介(续)n n利用利用BochsBochs做系统调试做系统调试n n查看内存命令查看内存命令n nx /nuf addr x /nuf addr 查看当前内存某个地址的内容,其中查看当前内存某个地址的内容,其中addraddr代表代表线性地址线性地址n n查看信息的命令查看信息的命令n nr/reg/regs/registers r/reg/regs/registers 列出列出CPUCPU的所有寄存器以及它们的当前的所有寄存器以及它们的当前值值n nfp/fpu fp/fpu 列出所有列出所有FPUFPU寄存器和他们的当前值寄存器和他们的当前值n nmmx mmx 列出所有列出所有M
24、MXMMX寄存器和他们的当前值寄存器和他们的当前值n nsse sse 列出所有列出所有SSESSE寄存器和他们的当前值寄存器和他们的当前值n nsreg sreg 显示段寄存器以及它们的内容显示段寄存器以及它们的内容n ncreg creg 显示控制寄存器以及它们的内容显示控制寄存器以及它们的内容n ninfo cpu info cpu 列出所有列出所有CPUCPU寄存器和他们的当前值寄存器和他们的当前值n ninfo eflags info eflags 显示显示eflagseflags寄存器的内容寄存器的内容n ninfo break info break 显示当前的断点信息显示当前的断点信息本章结束