struct VMContext{ DWORD v_eax; DWORD v_ebx; DWORD v_ecx; DWORD v_edx; DWORD v_esi; DWORD v_edi; DWORD v_ebp; DWORD v_efl; //符号寄存器}书上的原话是这样的:为什么这个环境唯独缺少ESP寄存器呢?因为ESP寄存器已经被放在真是的EBP环境中了,VStartVM将所有的寄存器都压入堆栈。所以,首先应该使堆栈平衡才能开始执行真正的代码,为此设计一个Handler VBegin来做这项工作。这里的EDI是指向VMContext的指针.下面是代码:vBegin: mov eax,dword ptr [ebp] mov [edi+0x1C],eax ;v_efl add esp,4 mov eax,dword ptr [ebp] mov [edi+0x18],eax ;v_ebp add esp,4 mov eax,dword ptr [ebp] mov [edi+0x14],eax ;v_edi add esp,4 mov eax,dword ptr [ebp] mov [edi+0x10],eax ;v_esi add esp,4 mov eax,dword ptr [ebp] mov [edi+0x0C],eax ;v_edx add esp,4 mov eax,dword ptr [ebp] mov [edi+0x08],eax ;v_ecx add esp,4 mov eax,dword ptr [ebp] mov [edi+0x04],eax ;v_ebx add esp,4 mov eax,dword ptr [ebp] mov [edi],eax ;v_eax add esp,4 add esp,4 ;释放参数 jmp VMDispather
[培训]科锐逆向工程师培训第53期2025年7月8日开班!