请选择 进入手机版 | 继续访问电脑版
设为首页收藏本站

梦织未来

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 166|回复: 1

[求助] VT Host State 段寄存器初始化设置没看懂求指导

[复制链接]

升级   12.67%

54

主题

0

精华

69

积分
发表于 2018-2-7 10:18:43 | 显示全部楼层 |阅读模式
在看别人的代码  看到Host State 的段寄存器初始化的时候 没看懂,因为他是直接用的一个值给段寄存器赋值的 ,然而貌似是正确的 但是我还是想求证一下 与GDT对应的段描述符 是否正确 ,因为在我的认知里  这里不是应该取当前 的 段选择子 然后在写入到Host Stae 内 ,而他这代码 是直接就赋值了 所以有点疑惑 ,当然 关于段选择子的权限什么的我都懂,就是想求证一下 他这么做会不会出错 ,还有 就是他是怎么指导 这个段就是对的? 即使他给出的 选择子的权限是内核权限 ,好了我也说不太清楚,反正就是很疑惑  ,有懂得 前辈们 帮忙看看把   下面上图

QQ截图20180207100730.png
QQ截图20180207100716.png
回复

使用道具 举报

升级   41.33%

13

主题

0

精华

112

积分
发表于 2018-2-10 04:31:11 | 显示全部楼层
Windows 是 Flat Memory Model,除了 FS 和 GS 段,其他的段 base 都为 0,limit 都是 MaxBytes - 1。

这四个段区别只有:
CS 是代码段,descriptor type 是 code,如果 32 位代码段的话 D 位为 1,64 位的话 L 位为 1。
DS ES SS 都是数据段,descriptor type 是 data。
还分 R3 和 R0 段,DPL 不同。

那根据这些分类,就得规定几种段的 selector 了:
R0_DATA 是内核态数据段选择子,R0_CODE 是内核态代码段选择子。
R3_DATA 是用户态数据段选择子,R3_CODE 是用户态代码段选择子,R3_CMCODE 是用户态兼容模式代码段选择子。

这都是写死在代码里不会变的值,进到内核态时会进行环境切换,段寄存器必然是对应上面定义好的值。

Host 就是 Hypervisor,一定是跑在内核态的,所以直接给 Host 段寄存器设置对应的值是绝对没错的。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|Archiver|mengwuji ( 粤ICP备13060035号-1 )  

GMT+8, 2018-2-23 08:49 , Processed in 0.353702 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表