紫水晶编程技术论坛 - 努力打造成全国最好的编程论坛

 找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 170|回复: 3

VT字段问题

[复制链接]

7

主题

38

帖子

0

精华

铜牌会员

Rank: 2Rank: 2

积分
55
发表于 2020-11-12 17:33:20 | 显示全部楼层 |阅读模式
本帖最后由 HookSuccess 于 2020-11-13 16:13 编辑

CR0_READ_SHADOW   这类 带SHADOW的字段什么时候会用到
GUEST_ES_AR_BYTES   还有这类带 AR_BYTES 的字段  
看别的源码里有设置这两个  
我自己的源码 设置  CR0_READ_SHADOW    会蓝屏 不设置反而能开启成功  
希望有懂得大佬解答下  谢谢

@tangptr@126.com  大佬来看看

1

主题

30

帖子

0

精华

铜牌会员

Rank: 2Rank: 2

积分
50
发表于 2020-11-18 09:20:47 | 显示全部楼层
GUEST_ES_AR_BYTES指的是权限,除了这个,还得填基址,边界和选择子
CR0_READ_SHADOW指的是一个cr0影子,填写这个字段以后,readcr0得到的就是字段里的值

评分

参与人数 1水晶币 +10 收起 理由
HookSuccess + 10 学习了

查看全部评分

7

主题

38

帖子

0

精华

铜牌会员

Rank: 2Rank: 2

积分
55
 楼主| 发表于 2020-11-18 10:34:58 | 显示全部楼层
kanren 发表于 2020-11-18 09:20
GUEST_ES_AR_BYTES指的是权限,除了这个,还得填基址,边界和选择子
CR0_READ_SHADOW指的是一个cr0影子,填 ...

感谢

69

主题

238

帖子

8

精华

贵宾会员

Rank: 2Rank: 2

积分
13990
发表于 2020-11-18 14:10:23 | 显示全部楼层
crx read shadow是要和crx guest/host mask组合用的,后者置位的位归host控制,复位的位归guest控制。当crx guest/host mask的某一位置位时,guest对crx的该位写入不同于read shadow对应位的值就会引起VM-Exit,读取该位时就会返回对应位的值。
通常来讲,如果写VT仅仅是搞个轻量虚拟化玩玩,那倒不必管cr0,管一下cr4的vmxe位即可。cr0 guest/host mask和cr0 read shadow都设置为零,于是guest读cr0时直接是guest cr0的值。至于cr4,可以将cr4 guest/host mask设置为0x2000,而read shadow设置为零,于是乎读取的时候就会返回CR4.VMXE=0了。
再举例说明一下吧。假设vmcs中guest cr0=0x80000021,cr0 guest/host mask=0x10000000,cr0 read shadow=0xffffffff。
那么第28位被host控制,其余位均被guest控制。
当guest读取cr0时,返回的第28位从cr0 read shadow里取,其余位从guest cr0里取,也就是说,返回的是0x90000021。
当guest写入cr0时,如果写入的值的第28位是复位,则产生VM-Exit,比如写入0x80000021会产生VM-Exit,而写入0x90000021不会。
具体看intel手册呗
Capture.JPG
至于楼上说“readcr0得到的就是字段里的值”,这是cr0 guest/host mask全部置位时的情况,或者说cr0 guest/host mask刚好等于guest cr0。
你蓝屏什么情况不清楚,仔细检查一遍vmcs并且观察调试器吧。

评分

参与人数 1水晶币 +60 收起 理由
Tesla.Angela + 60 赞一个!

查看全部评分

您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

手机版|Archiver|紫水晶工作室 ( 粤ICP备05020336号 )

GMT+8, 2021-1-17 17:45 , Processed in 0.032929 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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