From 34c875bf8bd3861f69dedbd7faada1a5c7748d56 Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Mon, 12 Mar 2012 18:59:45 +0100 Subject: [PATCH] ntdll: Add support for rep;ret instruction in function epilogs. --- dlls/ntdll/signal_x86_64.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/dlls/ntdll/signal_x86_64.c b/dlls/ntdll/signal_x86_64.c index 12acf942407..19d91a0a587 100644 --- a/dlls/ntdll/signal_x86_64.c +++ b/dlls/ntdll/signal_x86_64.c @@ -2648,6 +2648,8 @@ static BOOL is_inside_epilog( BYTE *pc ) case 0xc2: /* ret $nn */ case 0xc3: /* ret */ return TRUE; + case 0xf3: /* rep; ret (for amd64 prediction bug) */ + return pc[1] == 0xc3; /* FIXME: add various jump instructions */ } return FALSE; @@ -2702,6 +2704,7 @@ static void interpret_epilog( BYTE *pc, CONTEXT *context, KNONVOLATILE_CONTEXT_P context->Rsp += sizeof(ULONG64) + *(WORD *)(pc + 1); return; case 0xc3: /* ret */ + case 0xf3: /* rep; ret */ context->Rip = *(ULONG64 *)context->Rsp; context->Rsp += sizeof(ULONG64); return;