能力值:
( LV7,RANK:100 )
|
-
-
26 楼
为何都在吐槽第一张图╮(╯▽╰)╭
那个板子就是把两个脚交叉接了一下而已
|
能力值:
( LV7,RANK:100 )
|
-
-
27 楼
才发现你加红的字,然后感觉你说了这么多其实自己都未必调过BluePill吧。
你说我这样调试只能进入退出vmm无实际意义,这显然不是,既然产生了vmexit那自然是有指令触发的,这些指令往往跟系统资源密不可分。简单来说,VmxDispatchIoAccess实现了对io口in/out指令的处理。此函数原版有bug,我就是一步步跟进后找到问题的,改好后可以作为键盘记录器使用,也可以屏蔽按键。其它的如cpuid,rdmsr,wrmsr什么的也都可以跟进分析。
经过跟你的讨论我有所思考,的确到现在我也没彻底搞明白vmm,windbg,内核调试引擎三者之间的相互影响,欢迎拿事实继续吐槽,如果能把其中细节讲清楚,给出验证,我洗耳恭听。要是纯理论党就算了吧
|
能力值:
( LV2,RANK:10 )
|
-
-
28 楼
直接用WinDbg调试Nbp的root代码有时候是可以,其实这是个假象。Nbp的VMM直接用了Guest的CR3, 这样VM-Exit时root“看到的”就是那个CR3能看到的,如果你传递的是DriverEntry的那个就是system进程。
能调试的前提是VM-Exit时windows的调试支持相关的代码(及其访问的数据)未被换出。除此之外还可能有别的问题,想象下列情况:
你要调试VMM代码,如果VMM借用CR3而看到的代码,需要请求某个锁,而这个锁恰好被触发VM-Exit的guest代码持有,那肯定整个锁死(别忘了此时Guest处于冻结状态)。
其实只要想想VT究竟是用来干什么的就明白了。想象下,你的VMM同时支持2个Guest, 分别为32位和64位windows的情况。这么说吧: 在VMM内借用Guest的CR3,就象在内核里去跑用户层代码。VMM不应直接使用Guest的任何东西,如果要访问Guest内存,应该解析Guest分页结构,并将物理页面映射到VMM的虚拟地址空间(还要考虑是否开启EPT)。
如果确实想用WinDbg调试VMM,VMM应该使用自己的分页机制,也使用自己的IDT,监管中断。你要做的是自己实现调试支持,包括异常分发,以及通信部分比如KdCom什么的,都在你的VMM内实现。否则一定会出现莫名其秒锁死的问题。
我没用过VMware10,我的机器不支持EPT,不知道VMWare是否能模拟这功能。我就用的BOCHS加print,郁闷的是BOCHS有些VT功能没实现,现在也面临问题了。以后干脆弄2台物理机。
|
能力值:
( LV7,RANK:100 )
|
-
-
29 楼
听你这么说我明白为什么带内存隐藏的nbp无法下断了,因为GuestOS用的是自己的页表,而且在离开抹去了自身的信息。我进入non-root后下断,是不会影响vmm的内存的,所以即使产生vmexit也会无响应。我修改的代码把GuestOS的CR3设置为跟vmm相同,所以可以下断,只不过这样好像也失去了虚拟机的涵义…但我想要实现的功能仅仅是第一时间拦截某些指令,所以这也恰好满足我的需求。
你说的其它几点也很有道理,涨姿势了~
|
能力值:
( LV5,RANK:70 )
|
-
-
30 楼
我调试过,甚至还跟Superymk交流过这个NBP,顺便说下你调试的版本是放出去的版本,中断,完整的隐藏内存等等都是被阉割掉的.在Superymk书中有提过.
VMM的设计是可以维护多个GUESTOS.WINDBG又依赖krcom,krcom又依赖调试中断来实现调试!
在正常模式下 int1 ->krcom->windbg
可是vmm下 多了个vmm 在中间,触发int 1 ->vmm ->guest int1 -> krcom->windbg
这情况下windbg所依赖krcom已经被隔离在vmm 外了!
然后最要命的是如SdKfz说的那样,guest跟vmm根本是两世界.
|
能力值:
( LV5,RANK:70 )
|
-
-
31 楼
vmware是嵌套方式,所以只要实体机器CPU支持什么指令 虚拟机就可以用什么.而且最重要是调试这块vmware已经把全部障碍都清除了,唯一一个问题就是多CPU调试同步的问题.GDB自己的BUG!.
就目前而言 ida + gdb + vmware是最好的选择.
|
能力值:
( LV7,RANK:100 )
|
-
-
32 楼
明白了,也谢谢你,改天我去试试ida+gdb
|
能力值:
(RANK:860 )
|
-
-
33 楼
你不觉得很高大上么?
|
能力值:
( LV2,RANK:10 )
|
-
-
34 楼
也就是说,我的物理机不支持EPT,那VMware是无法以软件形式模拟这个特性来支持带EPT的VMM
BOCHS对VT的支持不完整,比如Monitor Trag Flag,郁闷。我怀疑还有别的Bug,有时候出的错莫名其秒。
|
能力值:
( LV5,RANK:70 )
|
-
-
35 楼
好像不行,毕竟是依赖实体机器的指令.不过好像现在新的CPU 都支持吧!BOCHS对硬件虚化是直接模拟,跟实体CPU没啥关系!
|
能力值:
( LV4,RANK:40 )
|
-
-
36 楼
每年的VT文章都会引发争议,就好像说地球是圆的一样,
|
能力值:
( LV5,RANK:60 )
|
-
-
37 楼
以前家里穷买不起带vt的cpu只能用用bochs调试
|
能力值:
( LV2,RANK:10 )
|
-
-
38 楼
VT资料够多了吧。。。。。
|
能力值:
( LV2,RANK:10 )
|
-
-
39 楼
首先这个方法确实可以调试,跟踪到NBP的一些问题。
第二不用焊什么板子啊,只需要直接焊2个com口的连接线而已。lz第一张图六个指头抓痒了,呵呵。
|
能力值:
( LV2,RANK:10 )
|
-
-
40 楼
同36楼 每年的VT文章都会引发争议,就好像说地球是圆的一样,
|
能力值:
( LV2,RANK:10 )
|
-
-
41 楼
别提Bochs的VT了, BUG 多得受不了, 虽然也很想去帮助改进, 但是现在更多的是拿来主义。 前段时间搞过一段嵌套VT , 苦于调试问题,也就放下了。
|
能力值:
( LV2,RANK:10 )
|
-
-
42 楼
兄弟,不用理楼上的,这人就是个二货,不懂装懂
我支持你,你这种奉献精神让我尊敬
|
能力值:
( LV3,RANK:30 )
|
-
-
43 楼
好贴! 学习! 正想研究VT!
|
能力值:
( LV3,RANK:30 )
|
-
-
44 楼
好贴!!!!!! 再次拜读!
|
能力值:
( LV2,RANK:10 )
|
-
-
45 楼
请问楼主,用你的NBP在vmware的WIN2K3里面加载时候,提示HVM:() vmx is not supported,物理机加载确提示成功?
环境:主机win 7 x64 ,vmware 10 - 处理器只开启了VT-X/amd v。无法开启你说的那个EPT选项,提示平台不支持。
cpu指令集EM64T,vt-x
是我的vmware设置不对吗?
|
能力值:
( LV7,RANK:100 )
|
-
-
46 楼
看起来像是你VMWare没设置好。看图2,要在处理器选项里勾上虚拟化Vt那个选项,也就是让VMWare虚拟出一套VT。
|
能力值:
( LV2,RANK:10 )
|
-
-
47 楼
图2没办法勾选,一勾选启动后提示平台不支持EPT,会不会是因为我的CPU不支持EPT导致的?所以无法嵌套?只能在首选模式选择intel VT-x。
|
|
|