From 29007aa22b7e69d4c69078e5166fffd5c7caac92 Mon Sep 17 00:00:00 2001 From: Michael Pavone Date: Mon, 13 Mar 2017 00:23:58 -0700 Subject: Properly treat invalid addressing modes for PEA/LEA as invalid instructinos --- 68kinst.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to '68kinst.c') diff --git a/68kinst.c b/68kinst.c index a753765..810e8ad 100644 --- a/68kinst.c +++ b/68kinst.c @@ -656,7 +656,11 @@ uint16_t * m68k_decode(uint16_t * istream, m68kinst * decoded, uint32_t address) decoded->dst.addr_mode = MODE_AREG; decoded->dst.params.regs.pri = m68k_reg_quick_field(*istream); istream = m68k_decode_op(istream, decoded->extra.size, &(decoded->src)); - if (!istream || decoded->src.addr_mode == MODE_REG) { + if ( + !istream || decoded->src.addr_mode == MODE_REG || decoded->src.addr_mode == MODE_AREG + || decoded->src.addr_mode == MODE_AREG_POSTINC || decoded->src.addr_mode == MODE_AREG_PREDEC + || decoded->src.addr_mode == MODE_IMMEDIATE + ) { decoded->op = M68K_INVALID; break; } @@ -844,7 +848,11 @@ uint16_t * m68k_decode(uint16_t * istream, m68kinst * decoded, uint32_t address) decoded->op = M68K_PEA; decoded->extra.size = OPSIZE_LONG; istream = m68k_decode_op(istream, OPSIZE_LONG, &(decoded->src)); - if (!istream) { + if ( + !istream || decoded->src.addr_mode == MODE_REG || decoded->src.addr_mode == MODE_AREG + || decoded->src.addr_mode == MODE_AREG_POSTINC || decoded->src.addr_mode == MODE_AREG_PREDEC + || decoded->src.addr_mode == MODE_IMMEDIATE + ) { decoded->op = M68K_INVALID; break; } -- cgit v1.2.3