public void Patch() { foreach (int patch in Patches) { long address = Address; int @int = VMB.GetInt(patch); int value = VMBuffer.EncodeInstructionBranch(VMBuffer.GetInstruction(@int), patch); VMB.SetInt(patch, value); } Patches.Clear(); }
public int DisasmOne(VMBuffer _vmb, int _offs, TextWriter _sw) { int num = _offs; int @int = _vmb.GetInt(_offs); _offs += 4; int instruction = VMBuffer.GetInstruction(@int); int arg = VMBuffer.GetArg(@int); int num2 = _offs; if ((instruction & 0x40) != 0) { _offs += ParamSize(arg); } int i = 11; _sw.Write("{0:x8} : ", num); int num3 = num; while (num3 < _offs) { _sw.Write("{0:x2}", _vmb.Buffer.GetBuffer()[num3]); num3++; i += 2; } for (; i < 36; i++) { _sw.Write(" "); } string text = Instruction2String(instruction); _sw.Write(text); i += text.Length; if ((instruction & 0xA0) == 128) { _sw.Write(Arg2String(arg)); i += 2; } else if ((instruction & 0xA0) == 0) { _sw.Write(Arg2String(arg & 0xF)); _sw.Write(Arg2String(arg >> 4)); i += 4; } for (; i < 46; i++) { _sw.Write(" "); } if ((instruction & 0x40) != 0) { long position = _vmb.Buffer.Position; _vmb.Buffer.Position = num2; switch (arg & 0xF) { case 3: _sw.Write("{0}", _vmb.Buffer.ReadLong()); break; case 0: _sw.Write("{0}", _vmb.Buffer.ReadDouble()); break; case 2: _sw.Write("{0}", _vmb.Buffer.ReadInteger()); break; case 5: _sw.Write("{0}", _vmb.Buffer.ReadInteger() & 0x1FFFFFFF); break; case 6: _sw.Write("{0}", Strings[_vmb.Buffer.ReadInteger()]); break; case 1: _sw.Write("{0}", _vmb.Buffer.ReadSingle()); break; case 4: _sw.Write("{0}", _vmb.Buffer.ReadInteger() != 0); break; case 15: _sw.Write("{0}", @int << 16 >> 16); break; } _vmb.Buffer.Position = position; } else if ((instruction & 0x20) != 0) { int num4 = num + VMBuffer.GetBranch(@int); _sw.WriteLine("0x{0:x8}", num4); } _sw.WriteLine(""); return(_offs); }