对于sysenter指令的理解,请张老师指点
Windows内核调试
对于sysenter指令的理解,请张老师指点
小麦
2013-07-19, 11:29 上午
最近在研读张老师的大作,结合<windows internals>第六版,以及intel官方文档,使我加深了对硬件以及操作系统内部原理的了解。
我想深入了解一下从用户态的API调用进入到内核的整个过程,目前有一些疑问,请张老师指点:
一、MSR寄存器:按我看到的资料,应该是Pentium2之后的处理器引入的,到目前为止,以后的处理器不会增加实现MSR的特性——是否就意味着未来的处理器会抛弃这种方式。《软件调试》P42中也写到:[MSR的本义是指这些寄存器与CPU型号有关,还没有正式纳入到IA-32架构中,也有可能不会被以后的CPU所兼容。]。请问我的理解是对的吗?
MSR address range between 40000000H - 400000FFH is marked as a specially reserved range. All existing and
future processors will not implement any features using any MSR in this range.(来自intel文档)
二、sysenter指令到底干了什么事情?看了intel文档,但是有一些问题还是不太肯定:
1.sysenter指令会不会产生中断?因为我看完了intel文档,没有说明是否产生中断,只是可以肯定这个指令是为了取代int 2e进入内核而设计,会比int 2e快。如果不会产生中断,那么通过什么机制实现?仅仅是通过改了cs:ip和ss:sp?如果是通过中断,那么中断例程是什么?这比int2e有什么优势?
2.sysenter会从MSR寄存器指向的地方读取CS,ESP,EIP供进入ring0后使用,但intel文档中写的是4个(黑体字):
Prior to executing the SYSENTER instruction, software must specify the privilege level 0
code segment
and
code
entry point
, and the privilege level 0
stack segment
and
stack pointer
by writing values to the following MSRs。
那么,SS到哪里去取?
问题有点多,但目前就卡在这个理解上面了,请张老师帮忙解答下。谢谢!
另外,
我还没有研究中断的处理过程,是不是应该先回头研究一下中断的处理过程?
Re: 对于sysenter指令的理解,请张老师指点
格蠹老雷
2013-07-19, 22:28 下午
问题一,这个名字最初如此,但不可断章取义,书中接着还有“但尽管本意如此...”,另外,新的CPU当然可能继续增加
问题二,8.3.3节有详细介绍,P179-182
Re: 对于sysenter指令的理解,请张老师指点
小麦
2013-07-19, 22:50 下午
谢谢张老师的回复,是我看书还不够仔细。
现在清楚很多了,sysenter的确没有使用中断,SS的值是通过cs+8的位置来获得。
看来还是要更细心。