SMM系列(2)-- SMI中断运行环境
来源:互联网 发布:mac画泳道图 编辑:程序博客网 时间:2024/06/06 14:24
保存现场
在上一节“SMM的基本概念”中已经讲到,在进入SMI中断处理程序之时,会将处理器的状态信息保存到SMRAM中,然后再退出中断处理函数时恢复现场。
运行环境的初始化
在保存完现场后,紧接着就会对寄存器的信息做一些相应的修改,这就是初始化SMI handler的运行环境。
其实主要是设置一些寄存器的初值:
通用寄存器对程序没有什么影响,所以不用做初始化。
EFLAGS初始化为0x2H,即所有的标志清零,bit1恒为1。
EIP为0x8000H, 即CS:[EIP]处刚好为SMI handler的第一条指令。
CR0的PE(保护),EM, TS, PG(分页)初清零。处理器工作于Big-Real-Mode下。这里与Real Mode最大的区别是,其地址偏移可以
到达32位,因此可以访问4GB的内存空间。
CR4被全部清零,全部扩展功能被取消
DR7(Bit10恒为1),禁止断点。
地址模式
刚才讲到,在SMI Handler下,处理器工作于Big-Real-Mode下,PE, PG标志被清除了,线性地址被当作物理地址来对待。
在SMM中,操作数默认的位数是16 bits,因此在实模式下,SMRAM的最大访问空间为1MB,但我们可以通过override prefixes的方式
访问到超过1MB的地址空间。具体解析如下:
在实模式下,段地址寄存器中的值不是用来指向一个段描述符表,而是直接用来参于运算。
比如:CS=0x1000, Offset=0xFFFF, 那么我们实际得到的物理地址是:0x1FFFF。
但是如果: CS=0xFFFF, Offset=0xFFFF,那么我们得到:
(0xFFFF << 4) + 0xFFFF = 0x10FFEF
这个值在实模式下是超过了1MB的,超出的部分被截掉,变成0xFFEF
所以,我们有必要先来了解一下Override Prefix了。
由Intel的spec中我们可以看到Instruction Prefix是可选的。只有操作码部分是必须的。
不同的prefix可以完成不同的附加功能。
比如:
2EH : CS segment override prefix.
36H : SS segment override prefix.
3EH : DS segment override prefix.
26H : ES segment override prefix.
64H : FS segment override prefix.
65H : GS segment override prefix.
其中:
67H: Address - Size Override Prefix
这个prefix可以用来完成16 bit 和 32 bit 之间的切换。
具体操作时我们可以使用32位寄存器间接寻址来做:
- SMM系列(2)-- SMI中断运行环境
- SMM系列(3)-- SMM的中断处理以及SMBASE重定向
- SMM系列(1)-- SMM基本概念
- SMM系列
- How dose SMI-S work?(2)
- SMI
- 漫谈IA32的系统管理模式(SMM)
- 调用源--一般的运行中断级--运行环境
- SMI Windows Mobile SDK2.2
- 软件成熟度指标(SMI)
- SMI vs SCI (转)
- SYSTEM MANAGEMENT INTERRUPT (SMI)
- SMI vs SCI (转)
- 如何禁用SMI中断,以增强PC实时性能?
- 关于SMI、MSI、SCI、INTx各种中断小结
- 关于SMI、MSI、SCI、INTx各种中断小结
- PHP问题解答系列(2):PHP运行环境搭建问题补充
- Hadoop入门系列(2) -- Hadoop运行环境搭建
- 配置与使用闪回之闪回事务
- S3C2440上 MMC/SD卡驱动实例开发讲解 .
- Shell内建命令之getopts
- ALSA之PCM分析
- Kinect开发学习笔记之(二)Kinect开发学习资源整理
- SMM系列(2)-- SMI中断运行环境
- Linux ALSA声卡介绍及使用
- 纸质办公电子化——iWebOffice中间件
- android4.0下的linux3.0的变化
- 指针与引用的区别
- Project Euler problem 25
- 机器学习中常用的相似性度量方法<总结性文章>
- Android的Webview中,javascript如何调用java方法
- 指针与引用的区别