以ReadprocessMemories为例该函数首先调用ntdll.dll中的函数在32位下调用NtReadVirtualMemory在64位下调用ZwReadVirtualMemoryEx

无论是32位还是64位,函数首先将系统调用号传给eax,在32位下CPU会查询自己是否支持快速调用,如果不支持则用中断的方式进入0环支持则直接进行sysenter快速调用,CPU会直接将函数放置在7FFE0300处,32位程序跳转,64位下将将直接查询7FFE0308低1位判断CPU是否支持快速调用并采取正确的进入方式(快速 syscall),少调用一个函数


7FFE0000h是_KUSER_SHARED_DATA结构体地址上述7FFE0300h是_KUSER_SHARED_DATA+0x300的syscall位置

中断方式下CS,EIP由中断描述符提供,SS,SP由TSS提供,快速调用下CS,SS,EIP,SP都由MSR寄存器给出
当进程进入0环后,原来的寄存器会存放在_Trap_Frame的结构体中

在中断方式下会向结构体内压入CS,SS,EIP,EFLAG,SP。
Comments NOTHING