37f942
commit e2dec0ff9b1e071779bee2c4e6fc82f8194b1c1d
37f942
Author: Mark Wielaard <mark@klomp.org>
37f942
Date:   Sun Jul 26 21:17:23 2020 +0200
37f942
37f942
    Handle REX prefixed JMP instruction.
37f942
    
37f942
    The NET Core runtime might generate a JMP with a REX prefix.
37f942
    For Jv (32bit offset) and Jb (8bit offset) this is valid.
37f942
    Prefixes that change operand size are ignored for such JMPs.
37f942
    So remove the check for sz == 4 and force sz = 4 for Jv.
37f942
    
37f942
    https://bugs.kde.org/show_bug.cgi?id=422174
37f942
37f942
diff --git a/VEX/priv/guest_amd64_toIR.c b/VEX/priv/guest_amd64_toIR.c
37f942
index fadf47d41..7888132eb 100644
37f942
--- a/VEX/priv/guest_amd64_toIR.c
37f942
+++ b/VEX/priv/guest_amd64_toIR.c
37f942
@@ -21392,8 +21392,8 @@ Long dis_ESC_NONE (
37f942
 
37f942
    case 0xE9: /* Jv (jump, 16/32 offset) */
37f942
       if (haveF3(pfx)) goto decode_failure;
37f942
-      if (sz != 4) 
37f942
-         goto decode_failure; /* JRS added 2004 July 11 */
37f942
+      sz = 4; /* Prefixes that change operand size are ignored for this
37f942
+                 instruction. Operand size is forced to 32bit. */
37f942
       if (haveF2(pfx)) DIP("bnd ; "); /* MPX bnd prefix. */
37f942
       d64 = (guest_RIP_bbstart+delta+sz) + getSDisp(sz,delta); 
37f942
       delta += sz;
37f942
@@ -21404,8 +21404,7 @@ Long dis_ESC_NONE (
37f942
 
37f942
    case 0xEB: /* Jb (jump, byte offset) */
37f942
       if (haveF3(pfx)) goto decode_failure;
37f942
-      if (sz != 4) 
37f942
-         goto decode_failure; /* JRS added 2004 July 11 */
37f942
+      /* Prefixes that change operand size are ignored for this instruction. */
37f942
       if (haveF2(pfx)) DIP("bnd ; "); /* MPX bnd prefix. */
37f942
       d64 = (guest_RIP_bbstart+delta+1) + getSDisp8(delta); 
37f942
       delta++;