diff options
Diffstat (limited to 'libcpu/i386_disasm.c')
| -rw-r--r-- | libcpu/i386_disasm.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/libcpu/i386_disasm.c b/libcpu/i386_disasm.c index f8a06cc4..d8bcf9b3 100644 --- a/libcpu/i386_disasm.c +++ b/libcpu/i386_disasm.c @@ -268,8 +268,6 @@ i386_disasm (const uint8_t **startp, const uint8_t *end, GElf_Addr addr, const uint8_t *data = *startp; const uint8_t *begin = data; - fmt = save_fmt; - /* Recognize all prefixes. */ int last_prefix_bit = 0; while (data < end) @@ -512,6 +510,7 @@ i386_disasm (const uint8_t **startp, const uint8_t *end, GElf_Addr addr, output_data.data = data; unsigned long string_end_idx = 0; + fmt = save_fmt; while (*fmt != '\0') { if (*fmt != '%') @@ -581,6 +580,14 @@ i386_disasm (const uint8_t **startp, const uint8_t *end, GElf_Addr addr, { switch (*data) { +#ifdef X86_64 + case 0x90: + if (prefixes & has_rex_b) + goto not; + str = "nop"; + break; +#endif + case 0x98: if (prefixes & ~has_data16) goto print_prefix; |
