ndisasm: fix handing of byte codes 250-253, 324
authorH. Peter Anvin <hpa@zytor.com>
Tue, 17 Aug 2010 05:13:14 +0000 (22:13 -0700)
committerH. Peter Anvin <hpa@zytor.com>
Tue, 17 Aug 2010 05:13:14 +0000 (22:13 -0700)
Fix handling of byte codes 250-253 (sign-extended 32-bit immediate,
extended to 64 bits) and 324 (instruction must have osize 64).

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
disasm.c

index 588c832..f2ec76b 100644 (file)
--- a/disasm.c
+++ b/disasm.c
@@ -1,6 +1,6 @@
 /* ----------------------------------------------------------------------- *
  *   
- *   Copyright 1996-2009 The NASM Authors - All Rights Reserved
+ *   Copyright 1996-2010 The NASM Authors - All Rights Reserved
  *   See the file AUTHORS included with the NASM distribution for
  *   the specific copyright holders.
  *
@@ -674,6 +674,16 @@ static int matches(const struct itemplate *t, uint8_t *data,
            break;
        }
 
+       case4(0250):
+           if (s_field_for == op1) {
+               opx->offset = gets8(data);
+               data++;
+           } else {
+               opx->offset = gets32(data);
+               data += 4;
+           }
+           break;
+
        case4(0260):
        {
            int vexm   = *r++;
@@ -823,7 +833,7 @@ static int matches(const struct itemplate *t, uint8_t *data,
            break;
 
        case 0324:
-           if (!(ins->rex & (REX_P|REX_W)) || osize != 64)
+           if (osize != 64)
                return false;
            o_used = true;
            break;