SYSEXIT——快速系统调用的快速返回
来源:互联网 发布:预科生的贩毒网络插曲 编辑:程序博客网 时间:2024/05/11 12:05
SYSEXIT——快速系统调用的快速返回
SYSEXIT用来快速调用返回至3层的用户代码。SYSEXIT是SYSENTER的同伴指令。该指令经过了优化,它可以使将由操作系统或执行程序(运行在0层)至用户代码(运行在3层)的返回发挥最大的性能。该指令只能在0层的权限执行。
在调用SYSEXIT指令前,软件必须通过MSR寄存器和通用寄存器,指定3层的代码段和代码指针,3层的堆栈段和堆栈指针:
1. IA32_SYSENTER_CS:一个32位值。低16位是0层的代码段的选择子。该值同时用来计算3层的代码段和堆栈段的选择子。
2. EDX:包含一个32位的3层的代码指针,指向第一条指令。
3. ECX:包含一个32位的3层的堆栈指针。
MSR寄存器可以通过指令RDMSR/WRMSR来进行读写。这些地址值在以后的intel 64和IA32处理器中是固定不变的。
当执行SYSEXIT,处理器会做下面的动作:
1. 将IA32_SYSENTER_CS的值加上16,将其结果加载到CS中。
2. 从EDX取出指令指针放到EIP中
3. 将IA32_SYSENTER_CS的值加上24,将其结果加载到SS中。
4. 从ECX取出堆栈指针放到ESP寄存器中
5. 切换到3层。
6. 开始执行选择的系统过程。
关于使用SYSENTER和SYSEXIT指令来调用和返回的的信息可以参看本章的“SWAPGS—Swap GS Base Register”.
SYSEXIT指令总是转移到DPL为3的保护模式下的代码段。这条指令需要操作系统首先满足下面的条件:
1. 选择的系统代码段必须是一个平坦的、32位最大为4G的代码段。此段必须是可执行的、可读、已存取、非一致的。
2. 选择的系统堆栈段必须是一个平坦的、32位最大为4G的数据段。此段必须可读写、已存取、可向上扩展。
SYSEXIT可在除实地址和V8086模式外所有其他模式下执行。
SYSENTER和SYSEXIT指令是从Pentium II开始新加入到IA32位架构中来的。这两个指令在处理器上是否有效要看CPUID指令返回的EDX寄存器中SEP标记(SYSENTER/SYSEXIT存在标记)是否置上。操作系统若要检查SEP标记必须要同时检查处理器族(family)和型号(model),这样才能确保结果的准确性。例如:
IF (CPUID SEP bit is set)
IF (Family == 6) AND (Model < 3) AND (Stepping < 3)
THEN
Fast System Call NOT supported
FI;
ELSE Fast System Call is supported
FI
当CPUID指令在Penitum Pro(Model 1)上执行,虽然返回的SEP标志是置上的,但该处理器还是不支持SYSENTER/SYSEXIT指令的。
- SYSEXIT——快速系统调用的快速返回
- SYSEXIT——快速系统调用的快速返回
- SYSEXIT——快速系统调用的快速返回
- 快速识别系统是否支持sysenter/sysexit
- SYSENTER——快速系统调用
- SYSENTER——快速系统调用
- SYSENTER——快速系统调用
- SYSENTER——快速系统调用
- 快速系统调用
- 系统调用和快速系统调用
- 快速调用系统对话框(全)
- 如何快速调用系统相机
- 快速的函数调用
- Linux 2.6 对新型 CPU 快速系统调用的支持
- Linux 2.6 对新型 CPU 快速系统调用的支持
- 深入浅出JNA—快速调用原生函数
- 深入浅出JNA—快速调用原生函数
- 深入浅出JNA—快速调用原生函数
- Ubuntu设置环境变量
- 你能相信么?这都是MINI!
- 设置视图背景颜色
- Windows文件操作API
- SYSENTER——快速系统调用
- SYSEXIT——快速系统调用的快速返回
- 发展“3G业务”急不得
- Random Thoughts #2 罗列几个国内的VR类应用
- 质疑《北京年底可免费无线上网》
- IPS与IDS
- 关于MAVEN和ANT的讨论(整理)
- mysql自动增长
- 操作系统是什么?
- 如何解压cpio.gz文件