From 0928f50bc616b0edef89d5898fc0c58254fdb68a Mon Sep 17 00:00:00 2001 From: ptitSeb Date: Wed, 26 Jul 2023 18:58:11 +0200 Subject: Emit a SIGILL on Illegal FF opcode (and better trace for it). Also fixed some Warning --- src/emu/x64run.c | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/src/emu/x64run.c b/src/emu/x64run.c index b8979e96..db68e807 100644 --- a/src/emu/x64run.c +++ b/src/emu/x64run.c @@ -1325,7 +1325,7 @@ x64emurun: GD->dword[0] = *(uint32_t*)ED; } else { // AVX not supported yet - emit_signal(emu, SIGILL, R_RIP, 0); + emit_signal(emu, SIGILL, (void*)R_RIP, 0); } break; case 0xC5: /* LDS Gd,Ed */ @@ -1338,7 +1338,7 @@ x64emurun: GD->dword[0] = *(uint32_t*)ED; } else { // AVX not supported yet - emit_signal(emu, SIGILL, R_RIP, 0); + emit_signal(emu, SIGILL, (void*)R_RIP, 0); } break; case 0xC6: /* MOV Eb,Ib */ @@ -1907,9 +1907,8 @@ x64emurun: case 3: /* CALL FAR Ed */ GETET(0); if(MODREG) { - printf_log(LOG_NONE, "Illegal Opcode %p: %02X %02X %02X %02X\n", (void*)R_RIP, opcode, nextop, PK(2), PK(3)); - emu->quit=1; - emu->error |= ERR_ILLEGAL; + printf_log(LOG_NONE, "Illegal Opcode %p: (%02X %02X %02X %02X) %02X %02X %02X %02X\n", (void*)R_RIP, PK(-6), PK(-5), PK(-4), PK(-3), opcode, nextop, PK(0), PK(1)); + emit_signal(emu, SIGILL, (void*)R_RIP, 0); goto fini; } else { if(rex.is32bits || !rex.w) { @@ -1938,9 +1937,8 @@ x64emurun: case 5: /* JMP FAR Ed */ GETET(0); if(MODREG) { - printf_log(LOG_NONE, "Illegal Opcode %p: 0x%02X 0x%02X %02X %02X\n", (void*)R_RIP, opcode, nextop, PK(2), PK(3)); - emu->quit=1; - emu->error |= ERR_ILLEGAL; + printf_log(LOG_NONE, "Illegal Opcode %p: (%02X %02X %02X %02X) %02X %02X %02X %02X\n", (void*)R_RIP, PK(-6), PK(-5), PK(-4), PK(-3), opcode, nextop, PK(0), PK(1)); + emit_signal(emu, SIGILL, (void*)R_RIP, 0); goto fini; } else { if(rex.is32bits || !rex.w) { @@ -1965,9 +1963,8 @@ x64emurun: } break; default: - printf_log(LOG_NONE, "Illegal Opcode %p: %02X %02X %02X %02X %02X %02X\n",(void*)R_RIP, opcode, nextop, PK(2), PK(3), PK(4), PK(5)); - emu->quit=1; - emu->error |= ERR_ILLEGAL; + printf_log(LOG_NONE, "Illegal Opcode %p: (%02X %02X %02X %02X) %02X %02X %02X %02X %02X %02X\n", (void*)R_RIP, PK(-6), PK(-5), PK(-4), PK(-3), opcode, nextop, PK(0), PK(1), PK(2), PK(3)); + emit_signal(emu, SIGILL, (void*)R_RIP, 0); goto fini; } break; -- cgit 1.4.1