无忧启动论坛

标题: 菜单有没有方法识别电脑主机? [打印本页]

作者: 2012ace    时间: 2012-8-16 21:42
标题: 菜单有没有方法识别电脑主机?
我现在硬盘上装了双系统,win 和 linux,grub4dos写入了mbr。
在win系统中安装了vmware,虚拟机中设置了物理硬盘作为虚拟机硬盘,通过grub4dos可以在虚拟机中启动硬盘上linux系统。
现在有一个问题:menu.lst的菜单默认为win,打开虚拟机时需要手动选择linux。我有个想法,根据条件来设置不同的default项,但是grub4dos有没有办法识别我启动的环境是物理主机还是虚拟机呢?
不知道我有没有说清楚我的问题,期待大家的解答。
作者: 不点    时间: 2012-8-16 21:57
这个问题提得好。我以前也遇到过这样的问题,但我却没有去寻找解决办法。

其实,解决办法是有的,可能有很多种解决办法。


我说说我此刻能想到的一种吧。根据 BIOS 的不同,即可区分主机和虚拟机。

虚拟机的 BIOS (ROM) 也是虚拟的。所以,你大概可以在虚拟机的 ROM 空间中找到 Vmware 之类的字符串。真实机的 ROM 里面应该不会有 vmware 之类的字符串。然后你再设法写一个含有条件判断的菜单即可。
作者: 2012ace    时间: 2012-8-16 22:06
标题: 回复 #2 不点 的帖子
嗯,我想到的也是bios。我对grub4dos的命令不熟,可以告诉我可能会用到的几个命令吗?这样我可以有针对性地查资料。
作者: 不点    时间: 2012-8-16 22:39
你知道,grub4dos 能够访问内存,所以,ROM 的内容也是可以查看的。

你可以在命令行下用 cat 、read 之类的命令查看内存的内容。查看内存之后,字符串搜索、比较之类的,似乎还需要一定的技巧。比如,cat 命令就可以用来搜索字符串。是否成功搜到,cat 会返回一个数值。返回 0 表示失败。利用条件操作指令,即可写出你的菜单。多多研究文档吧。
作者: 2012ace    时间: 2012-8-16 23:12
标题: 回复 #4 不点 的帖子
好,谢谢~~我去研究研究
作者: 2012ace    时间: 2012-8-17 23:02
标题: 回复 #4 不点 的帖子
昨晚折腾了很久,cat内存地址很多都显示乱码;网上说,bios加载在内存的地址是从0xFFFF开始,cat一段地址,似乎没什么信息。用read读地址呢,得到的则是16进制数。。。读bios信息的方法我没有成功。。。
后来又想到物理启动和虚拟机启动内存的大小上有区别,于是用read读到内存大小来判断,功能是实现了,不过不完美啊
作者: 不点    时间: 2012-8-23 06:41
编译了一个版本,上载到时空论坛,应该可以解决你的问题了。

当 grub4dos 处于 VMware 虚拟机中的时候,位于物理地址 0x8350 处的字符串应该是 VMwareVMware,这就可以判断出 VMware 的存在了。



  1. cat    --hex    (md)0x41+1
复制代码


读出 0x8200 处的一个扇区,在偏移 0x150 处就会显示出字符串 VMwareVMware 。

如果不是在虚拟机中(而是在真实机中),那么 0x150 处应该是 00 字节。

如果是在其他虚拟机中,0x150 处究竟是什么字符串,由这个虚拟机的虚拟 cpuid 来决定。

[ 本帖最后由 不点 于 2012-8-23 06:57 编辑 ]
作者: 2012ace    时间: 2012-8-25 22:41
有VMwareVMware字符串,怎么写条件判断呢,查找字符串,我只知道grep命令。。。

[ 本帖最后由 2012ace 于 2012-8-25 22:46 编辑 ]

QQ截图20120825224123.png (11.77 KB, 下载次数: 44)

QQ截图20120825224123.png

作者: 不点    时间: 2012-8-26 07:41
标题: 回复 #8 2012ace 的帖子
哇塞!成功了!可是 zxw 怎么总是失败呢?难道与版本有关系?或者与人品有关系?你用的是什么版本的 VMware?

看到 01 02 00 80 了吗?把它写成一个整数,它就是 0x80000201,其最高位是 1(即,0x80 的最高位是 1),表示虚拟机管理器存在。

你也可以简化判断,只要判断出 0x308000 处的四个字节是 VMwa (0x61774D56)就行了,例如:

  1. checkrange 0x61774D56 read 0x308000 && goto vmware
复制代码

作者: 2012ace    时间: 2012-8-29 22:24
标题: 回复 #9 不点 的帖子
我的是 vmware 7.1.0
作者: 讯极天度    时间: 2012-10-22 22:07
标题: 我也来测试,虽然很迟了
测试平台:Win8 RTM 企业版
               VM 9.0     绿色版

win8G4D.jpg (44.84 KB, 下载次数: 27)

win8G4D.jpg





欢迎光临 无忧启动论坛 (http://bbs.wuyou.net/) Powered by Discuz! X3.3