From 0e223c150c3385956e10d08b7f5bfb5a2ace9cd0 Mon Sep 17 00:00:00 2001 From: Matthias Schwarzott Date: Fri, 9 Feb 2024 08:22:58 +0100 Subject: [PATCH] Bug 471036 - Print more context for amd64 disasm rip mismatch --- VEX/priv/guest_amd64_toIR.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/VEX/priv/guest_amd64_toIR.c b/VEX/priv/guest_amd64_toIR.c index e27d891aa..0414aa5c5 100644 --- a/VEX/priv/guest_amd64_toIR.c +++ b/VEX/priv/guest_amd64_toIR.c @@ -32693,10 +32693,32 @@ DisResult disInstr_AMD64 ( IRSB* irsb_IN, if (guest_RIP_next_mustcheck && guest_RIP_next_assumed != guest_RIP_curr_instr + dres.len) { vex_printf("\n"); + vex_printf(" current %%rip = 0x%llx\n", + guest_RIP_curr_instr ); vex_printf("assumed next %%rip = 0x%llx\n", guest_RIP_next_assumed ); vex_printf(" actual next %%rip = 0x%llx\n", guest_RIP_curr_instr + dres.len ); + vex_printf("instruction bytes: " + "0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x\n", + getUChar(delta+0), + getUChar(delta+1), + getUChar(delta+2), + getUChar(delta+3), + getUChar(delta+4), + getUChar(delta+5), + getUChar(delta+6), + getUChar(delta+7), + getUChar(delta+8), + getUChar(delta+9) ); + + /* re-disassemble the instruction so as + to generate a useful error message; then assert. */ + vex_traceflags |= VEX_TRACE_FE; + guest_RIP_next_assumed = 0; + guest_RIP_next_mustcheck = False; + dres = disInstr_AMD64_WRK ( &expect_CAS, + delta, archinfo, abiinfo, sigill_diag_IN ); vpanic("disInstr_AMD64: disInstr miscalculated next %rip"); } -- 2.47.2