首页
社区
课程
招聘
[求助]CheatEngine(开源的)里的代码
发表于: 2009-2-16 12:53 10094

[求助]CheatEngine(开源的)里的代码

2009-2-16 12:53
10094
看到一段代码实在不明白。函数vmcall()实际作用得到地是什么?

int vmcall(void *vmcallinfo, unsigned int level1pass)
{
        __asm
        {
                push edx
                mov eax,[esp+8]  //not +4 because of that push, retard
                mov edx,[esp+12]
                __emit 0x0f
                __emit 0x01
            __emit 0xc1 //vmcall, eax will be edited, or a UD exception will be raised
                pop edx
                ret 8
        }
}

unsigned int vmx_getRealCR0()
{
        struct
        {
                unsigned int structsize;
                unsigned int level2pass;
                unsigned int command;
        } vmcallinfo;

        vmcallinfo.structsize=sizeof(vmcallinfo);
        vmcallinfo.level2pass=vmx_password2;
        vmcallinfo.command=VMCALL_GETCR0;

        return vmcall(&vmcallinfo, vmx_password1);
}

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (13)
雪    币: 242
活跃值: (14)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
就是对 VMCALL指令的简单封装

在支持VMX并且开启VMX的CPU上 VMCALL将会从把控制权交给VMM(VM Moniter),在不支持VMX或者
没有开启VMX的CPU上,此指令将导致UD类异常(未定义的机器码)

这条指令实际实现了一个GUEST VM 到 VMM调用

CE在这里就是用这条指令去调用VMM去完成一些功能,EDX是第一个参数  eax是第二个参数
2009-2-16 14:00
0
雪    币: 204
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
谢谢,学习了。
2009-2-17 15:57
0
雪    币: 208
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
怎么开启VMX呢?
2009-2-27 02:55
0
雪    币: 196
活跃值: (135)
能力值: ( LV10,RANK:170 )
在线值:
发帖
回帖
粉丝
5
如果主板支持的话,会在BIOS里有相应选项. 必须得关机一次再启动就可以了.
2009-2-27 08:57
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
bios的那个选项?
2009-2-27 09:09
0
雪    币: 196
活跃值: (135)
能力值: ( LV10,RANK:170 )
在线值:
发帖
回帖
粉丝
7
t61的本子的BIOS里的有个CPU选项,进去后有个VT选项,右边选项可以控制其开/关.
2009-2-27 09:26
0
雪    币: 208
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
厉害,楼上的什么都知道
2009-2-27 10:52
0
雪    币: 242
活跃值: (14)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
9
其实上面thinkSJ的说法严格来说不对

VMX是CPU的特性
VMX的开关只有一个VMXON指令,如果CPU不支持这条指令,此机器码会产生UD类异常
如果支持,VMXON会检查一些内部标志位然后决定是开启VMX还是说触发UD异常

所谓主板BIOS的开关,只是在POST后对CPU进行了设置(标志位),告诉CPU不能启用VMX.
也就是说,如果BIOS没有这个选项,只要硬件支持,一样是可以开启的
2009-2-27 11:14
0
雪    币: 242
活跃值: (14)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
10
只要VMXON执行成功,VMX可以说就开启了,不过其他VMX(如VMXCALL)调用是有一定的条件的,不在恰当次序下使用,一样是异常
2009-2-27 11:17
0
雪    币: 196
活跃值: (135)
能力值: ( LV10,RANK:170 )
在线值:
发帖
回帖
粉丝
11
8楼: 因为我的本子是t61的,所以才知道的.

9楼说法更专业.我刚才PM你了.
2009-2-27 11:59
0
雪    币: 204
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
_emit 0x0f
_emit 0x01
_emit 0xc1  //vmcall

这个指令调用,没抱错,跑飞了。
那位朋友能 说说 怎么回事?
2009-3-24 13:42
0
雪    币: 340
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
有点像sysenter??
2009-5-19 11:43
0
雪    币: 7309
活跃值: (3788)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
14
和dbvm通信的代码
2009-5-19 13:56
0
游客
登录 | 注册 方可回帖
返回
//