Commit e7863eaa authored by Derek Lesho's avatar Derek Lesho Committed by Alexandre Julliard

ntoskrnl.exe: Add emulation of rdmsr for MSR_LSTAR control register.

parent 9a2ff844
......@@ -473,6 +473,8 @@ WINE_DEFAULT_DEBUG_CHANNEL(int);
#define REX_R 4
#define REX_W 8
#define MSR_LSTAR 0xc0000082
#define REGMODRM_MOD( regmodrm, rex ) ((regmodrm) >> 6)
#define REGMODRM_REG( regmodrm, rex ) (((regmodrm) >> 3) & 7) | (((rex) & REX_R) ? 8 : 0)
#define REGMODRM_RM( regmodrm, rex ) (((regmodrm) & 7) | (((rex) & REX_B) ? 8 : 0))
......@@ -586,6 +588,12 @@ static BYTE *INSTR_GetOperandAddr( CONTEXT *context, BYTE *instr,
}
static void fake_syscall_function(void)
{
TRACE("() stub\n");
}
/***********************************************************************
* emulate_instruction
*
......@@ -757,6 +765,24 @@ static DWORD emulate_instruction( EXCEPTION_RECORD *rec, CONTEXT *context )
context->Rip += prefixlen + 3;
return ExceptionContinueExecution;
}
case 0x32: /* rdmsr */
{
ULONG reg = context->Rcx;
TRACE("rdmsr CR 0x%08x\n", reg);
switch (reg)
{
case MSR_LSTAR:
{
ULONG_PTR syscall_address = (ULONG_PTR)fake_syscall_function;
context->Rdx = (ULONG)(syscall_address >> 32);
context->Rax = (ULONG)syscall_address;
break;
}
default: return ExceptionContinueSearch;
}
context->Rip += prefixlen + 2;
return ExceptionContinueExecution;
}
case 0xb6: /* movzx Eb, Gv */
case 0xb7: /* movzx Ew, Gv */
{
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment