public override TargetAddress GetEffectiveAddress(TargetMemoryAccess memory) { if (!CallTarget.IsNull) { return(CallTarget); } Registers regs = memory.GetRegisters(); long effective_displacement = Displacement; if (IndexRegister >= 0) { long index = regs [IndexRegister].GetValue(); index *= 1 << SIB.Scale; effective_displacement += index; } TargetAddress effective_address; if (is_ip_relative) { effective_address = Address + InstructionSize; } else { effective_address = new TargetAddress( memory.AddressDomain, regs [Register].GetValue()); } effective_address += effective_displacement; if (DereferenceAddress) { effective_address = memory.ReadAddress(effective_address); } return(effective_address); }
public override TargetAddress GetEffectiveAddress(TargetMemoryAccess memory) { if (!CallTarget.IsNull) return CallTarget; Registers regs = memory.GetRegisters (); long effective_displacement = Displacement; if (IndexRegister >= 0) { long index = regs [IndexRegister].GetValue (); index *= 1 << SIB.Scale; effective_displacement += index; } TargetAddress effective_address; if (is_ip_relative) effective_address = Address + InstructionSize; else effective_address = new TargetAddress ( memory.AddressDomain, regs [Register].GetValue ()); effective_address += effective_displacement; if (DereferenceAddress) effective_address = memory.ReadAddress (effective_address); return effective_address; }