虚拟机和真实机器的的KiFastCallEntry不一样

Windows内核

虚拟机和真实机器的的KiFastCallEntry不一样


lazyworm 2009-07-31, 20:55 下午

动态跟踪得到的代码如下

VPC 虚拟机 OS XP+SP2  英文版  CPU 单核

指列出不同的部分

804de764 0f8546feffff    jne     nt!Dr_FastCallDrSave (804de5b0)         [br=0]//
804de76a 8b5d60          mov     ebx,dword ptr [ebp+60h]  //ebx=ktrap_frame.ebp
804de76d 8b7d68          mov     edi,dword ptr [ebp+68h]  //edi=ktrap_frame.eip
804de770 89550c          mov     dword ptr [ebp+0Ch],edx  //krap_frame.DbgArgPointer=
804de773 e91545d101      jmp     821f2c8d
.....//设置ktrap_frame中前4个和调试有关的字段
821f2c8d c74508000ddbba  mov     dword ptr [ebp+8],0BADB0D00h  //krap_frame.DbgArgMark=
821f2c94 895d00          mov     dword ptr [ebp],ebx 
821f2c97 897d04          mov     dword ptr [ebp+4],edi
821f2c9a e928a4f8ff      jmp     8217d0c7

.....
8217d0c7 9c              pushfd
8217d0c8 50              push    eax
8217d0c9 a11494f1f5      mov     eax,dword ptr ds:[F5F19414h] ds:0023:f5f19414=????????
8217d0ce 800802          or      byte ptr [eax],2
8217d0d1 804c240502      or      byte ptr [esp+5],2
8217d0d6 58              pop     eax
8217d0d7 9d              popfd

而真实机器是:  xp+sp2 中文 双核

804dee8e 8b7d68          mov     edi,dword ptr [ebp+68h]
804dee91 89550c          mov     dword ptr [ebp+0Ch],edx
804dee94 c74508000ddbba  mov     dword ptr [ebp+8],0BADB0D00h
804dee9b 895d00          mov     dword ptr [ebp],ebx
804dee9e 897d04          mov     dword ptr [ebp+4],edi      //设置完krap_frame中的前4个和调试有关的寄存器 就是sti了。
804deea1 fb              sti
804deea2 8bf8            mov     edi,eax
804deea4 c1ef08          shr     edi,8
804deea7 83e730          and     edi,30h
804deeaa 8bcf            mov     ecx,edi
804deeac 03bee0000000    add     edi,dword ptr [esi+0E0h]
804deeb2 8bd8            mov     ebx,eax

Powered by Community Server Powered by CnForums.Net