Derek Lesho : ntoskrnl.exe: Add emulation of rdmsr for MSR_LSTAR control register.
Module: wine Branch: master Commit: e7863eaa4e401aa98c3946daae0a2607fbd72ab4 URL: https://source.winehq.org/git/wine.git/?a=commit;h=e7863eaa4e401aa98c3946daa... Author: Derek Lesho <dereklesho52(a)gmail.com> Date: Thu Mar 21 11:10:08 2019 -0400 ntoskrnl.exe: Add emulation of rdmsr for MSR_LSTAR control register. Signed-off-by: Derek Lesho <dereklesho52(a)Gmail.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/ntoskrnl.exe/instr.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/dlls/ntoskrnl.exe/instr.c b/dlls/ntoskrnl.exe/instr.c index 67cdd32..90a63b0 100644 --- a/dlls/ntoskrnl.exe/instr.c +++ b/dlls/ntoskrnl.exe/instr.c @@ -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 */ {
participants (1)
-
Alexandre Julliard