-
-
[求助]关于IN指令一个问题
-
发表于: 2015-12-29 01:03 2848
-
下面是一段检测程序是否在虚拟机中运行的代码:
#include <windows.h>
#include <stdio.h>
BOOL gInVMWARE, gInVirtualPC;
BOOL VMWareTest()
{
BYTE PortValue1,PortValue2;
__try
{
__asm
{
pushad
pushfd
xor ebx,ebx
mov ecx,0xa
mov eax, 'VMXh' ; EAX=magic //564D5868
mov dx, 'VX' ; DX=magic
in eax, dx ; specially processed io cmd
cmp ebx, 'VMXh' ; also eax/ecx modified (maybe vmw/os ver?)
sete al;
movzx eax, al
mov gInVMWARE, eax;
popfd
popad
}
}
代码中,在IN指令后,直接对ebx和'VMXh'进行比较,并且注释时eax/ecx也被修改了。
想请教一下,in指令会除了修改eax之外,还会修改ebx和ecx么?
#include <windows.h>
#include <stdio.h>
BOOL gInVMWARE, gInVirtualPC;
BOOL VMWareTest()
{
BYTE PortValue1,PortValue2;
__try
{
__asm
{
pushad
pushfd
xor ebx,ebx
mov ecx,0xa
mov eax, 'VMXh' ; EAX=magic //564D5868
mov dx, 'VX' ; DX=magic
in eax, dx ; specially processed io cmd
cmp ebx, 'VMXh' ; also eax/ecx modified (maybe vmw/os ver?)
sete al;
movzx eax, al
mov gInVMWARE, eax;
popfd
popad
}
}
代码中,在IN指令后,直接对ebx和'VMXh'进行比较,并且注释时eax/ecx也被修改了。
想请教一下,in指令会除了修改eax之外,还会修改ebx和ecx么?
赞赏
他的文章
看原图
赞赏
雪币:
留言: