首页
社区
课程
招聘
在驱动中为什么无法使用invept指令呢
2016-2-29 12:57 5618

在驱动中为什么无法使用invept指令呢

2016-2-29 12:57
5618
最近在学习VT,需要用Invept刷新cache,看了<处理器虚拟化技术>这本书上,有关于INVEPT指令的使用示例:invept rax, [rsi] ,看了下它的代码,并没有用机器码实现,而是直接用了Invept指令
        ;; 使用 "all-context invalidation" 类型刷新 cache
        ;;
        mov eax, ALL_CONTEXT_INVALIDATION
        invvpid eax, [ebp + PCB.InvDesc]
        invept eax, [ebp + PCB.InvDesc]    // 我用Notepad++搜索,并没有找到关于invept的机器码定义
        


由于我是32位操作系统  然后用了下面的代码


VOID Invept(int Type, int* Descriptor){
		
		_asm{
				PUSHAD
				MOV EAX,1                  // Single-context
				MOV ESI,Descriptor     //  invept 描述符
				invept EAX, [ESI]	  
					POPAD
		}
}


但是我用WDK 7600.16385.1版本的编译后,却出现了如下错误



请问谁能帮忙解答下吗,多谢了

[培训]《安卓高级研修班(网课)》月薪三万计划,掌 握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

上传的附件:
收藏
点赞0
打赏
分享
最新回复 (2)
雪    币: 689
活跃值: (427)
能力值: ( LV11,RANK:190 )
在线值:
发帖
回帖
粉丝
zplusplus 1 2016-2-29 16:24
2
0
原因很简单,微软的编译器识别不了invept这条指令,作者在写上一本书时用的编译器是NASM,这本书不知道变了没有,你确定你好好看这本书的最开始部分了吗?
顺带,我用NASM帮你编译了一下invept eax,[ESI]这条指令的编码是 66 0F 38 80 06(66是第0个字节)
雪    币: 581
活跃值: (215)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
ghostway 1 2016-3-3 17:56
3
0
楼上正解,硬编码
游客
登录 | 注册 方可回帖
返回