From 5cc5781a200d344ae7c7b6ae95e97f7189856838 Mon Sep 17 00:00:00 2001 From: Stanislav Shwartsman Date: Tue, 13 Jan 2009 22:40:16 +0000 Subject: [PATCH] Fixed memory corruption inside disasm module ! --- bochs/disasm/dis_decode.cc | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/bochs/disasm/dis_decode.cc b/bochs/disasm/dis_decode.cc index ed7e59204..05c0781de 100644 --- a/bochs/disasm/dis_decode.cc +++ b/bochs/disasm/dis_decode.cc @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////// -// $Id: dis_decode.cc,v 1.47 2008-06-11 21:05:38 sshwarts Exp $ +// $Id: dis_decode.cc,v 1.48 2009-01-13 22:40:16 sshwarts Exp $ ///////////////////////////////////////////////////////////////////////// #include @@ -202,7 +202,7 @@ x86_insn disassembler::decode(bx_bool is_32, bx_bool is_64, bx_address base, bx_ { switch(attr) { case _GROUPN: - entry = &(OPCODE_TABLE(entry)[insn.nnn]); + entry = &(OPCODE_TABLE(entry)[insn.nnn & 7]); break; case _GRPSSE: @@ -217,13 +217,13 @@ x86_insn disassembler::decode(bx_bool is_32, bx_bool is_64, bx_address base, bx_ break; case _GRPRM: - entry = &(OPCODE_TABLE(entry)[insn.rm]); + entry = &(OPCODE_TABLE(entry)[insn.rm & 7]); break; case _GRPFP: if(insn.mod != 3) { - entry = &(OPCODE_TABLE(entry)[insn.nnn]); + entry = &(OPCODE_TABLE(entry)[insn.nnn & 7]); } else { int index = (insn.b1-0xD8)*64 + (insn.modrm & 0x3f); entry = &(BxDisasmOpcodeInfoFP[index]);