ntoskrnl.exe: Add emulation of rdmsr for MSR_LSTAR control register.
Signed-off-by: Derek Lesho <dereklesho52@Gmail.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
9a2ff84402
commit
e7863eaa4e
|
@ -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 */
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue