From 1d21bb125fd6c18fa5edbdda5882424a3c3a08fe Mon Sep 17 00:00:00 2001 From: Aleksandar Andrejevic Date: Mon, 11 Nov 2013 17:24:22 +0000 Subject: [PATCH] [FAST486] Fix the Mod-Reg-R/M parser. EBP cannot be used as a SIB byte base, instead it's used to mark that the base is an immediate operand. svn path=/branches/ntvdm/; revision=60944 --- lib/fast486/common.inl | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/lib/fast486/common.inl b/lib/fast486/common.inl index 38dadbf00c3..524d3d90867 100644 --- a/lib/fast486/common.inl +++ b/lib/fast486/common.inl @@ -719,7 +719,21 @@ Fast486ParseModRegRm(PFAST486_STATE State, Index = (SibByte >> 3) & 0x07; if (Index != FAST486_REG_ESP) Index = State->GeneralRegs[Index].Long; else Index = 0; - Base = State->GeneralRegs[SibByte & 0x07].Long; + + if ((SibByte & 0x07) != FAST486_REG_EBP) + { + /* Use the register a base */ + Base = State->GeneralRegs[SibByte & 0x07].Long; + } + else + { + /* Fetch the base */ + if (!Fast486FetchDword(State, &Base)) + { + /* Exception occurred */ + return FALSE; + } + } /* Calculate the address */ ModRegRm->MemoryAddress = Base + Index * Scale; -- 2.17.1