public X86Address(X86Register32 baseRegister, Int32 offset) { this.BaseRegister = baseRegister; this.Offset = offset; this.IndexRegister = X86Register32.None; this.IndexShift = 0; }
private void memindex_emit(BinaryWriter writer, Byte r, X86Register32 basereg, Int32 disp, X86Register32 indexreg, Byte shift) { if (basereg == X86Register32.None) { address_byte(writer, 0, (byte)r, 4); address_byte(writer, (byte)shift, (byte)indexreg, 5); writer.Write((Int32)disp); } else if (disp == 0 && basereg == X86Register32.EBP) { address_byte(writer, 0, (byte)r, 4); address_byte(writer, (byte)shift, (byte)indexreg, (byte)basereg); } else if (X86Writer.is_imm8(disp)) { address_byte(writer, 1, (byte)r, 4); address_byte(writer, (byte)shift, (byte)indexreg, (byte)basereg); writer.Write((Byte)disp); } else { address_byte(writer, 2, (byte)r, 4); address_byte(writer, (byte)shift, (byte)indexreg, 5); writer.Write((Int32)disp); } }
public X86Address(X86Register32 baseRegister, Int32 offset, X86Register32 indexRegister, byte indexShift) { this.BaseRegister = baseRegister; this.Offset = offset; this.IndexRegister = indexRegister; this.IndexShift = indexShift; }
public void ByteSwap(X86Register32 reg) { writer.Write( new byte[] { 0x0F, (byte)(0xC8 | (byte)reg) } ); }
public void Shr32(X86Register32 reg, byte count) { if (count == 1) { writer.Write(new byte[] { 0xD1 }); reg_emit32((X86Register32)5, reg); } else { writer.Write(new byte[] { 0xC1 }); reg_emit32((X86Register32)5, reg); imm_emit8(count); } }
public void Shl32(X86Register32 reg, byte count) { if (count == 1) { writer.Write(new byte[] { 0xD1 }); reg_emit32((X86Register32)4, reg); } else { writer.Write(new byte[] { 0xC1 }); reg_emit32((X86Register32)4, reg); imm_emit8(count); } }
private void membase_emit(BinaryWriter writer, Byte r, X86Register32 basereg, Int32 disp) { do { if ((basereg) == X86Register32.ESP) { if ((disp) == 0) { address_byte(writer, 0, (byte)r, (byte)X86Register32.ESP); address_byte(writer, 0, (byte)X86Register32.ESP, (byte)X86Register32.ESP); } else if (X86Writer.is_imm8(disp)) { address_byte(writer, 1, (byte)r, (byte)X86Register32.ESP); address_byte(writer, 0, (byte)X86Register32.ESP, (byte)X86Register32.ESP); writer.Write((byte)(disp)); } else { address_byte(writer, 2, (byte)r, (byte)X86Register32.ESP); address_byte(writer, 0, (byte)X86Register32.ESP, (byte)X86Register32.ESP); writer.Write(disp); } break; } else if (disp == 0 && basereg != X86Register32.EBP) { address_byte(writer, 0, (byte)r, (byte)basereg); } else if (X86Writer.is_imm8(disp)) { address_byte(writer, 1, (byte)r, (byte)basereg); writer.Write((byte)(disp)); } else { address_byte(writer, 2, (byte)r, (byte)basereg); writer.Write(disp); } } while (false); }
public void Shl64(X86Register32 left, X86Register32 right) { writer.Write(new byte[] { 0x0F, 0xA5 }); reg_emit32(right, left); }
public void Cmp32(X86Register32 dest, Int32 src) { writer.Write(new byte[] { 0x81 }); reg_emit32((X86Register32)7, dest); imm_emit32(src); }
public void Shl64(X86Register32 left, X86Register32 right, byte count) { writer.Write(new byte[] { 0x0F, 0xA4 }); reg_emit32(right, left); imm_emit8(count); }
public void CmpXChg32(X86Address dest, X86Register32 src) { writer.Write(new byte[] { 0x0F, 0xB1 }); dest.Emit(writer, src); }
public void Shr64(X86Address left, X86Register32 right) { writer.Write(new byte[] { 0x0F, 0xAD }); left.Emit(writer, right); }
public void Mov32(X86Address dest, X86Register32 src) { this.writer.Write(new byte[] { 0x89 }); dest.Emit(writer, src); }
public void Mov32(X86Register32 dest, X86Address src) { this.writer.Write(new byte[] { 0x8b }); src.Emit(writer, dest); }
public void Mov32(X86Register32 dest, Int32 value) { this.writer.Write(new byte[] { 0xc7 }); reg_emit32(0, dest); writer.Write(value); }
public void Negate32(X86Register32 dest) { writer.Write(new byte[] { 0xF7 }); reg_emit32((X86Register32)3, dest); }
public void Mul32(X86Register32 src) { writer.Write(new byte[] { 0xF7 }); reg_emit32((X86Register32)4, src); }
public void Mov32(X86Register32 dest, X86Register32 src) { writer.Write(new byte[] { 0x8b }); reg_emit32(dest, src); }
public void CmpXChg32(X86Register32 dest, X86Register32 src) { writer.Write(new byte[] { 0x0F, 0xB1 }); reg_emit32(src, dest); }
public void AddC32(X86Register32 dest, X86Register32 src) { writer.Write(new byte[] { 0x11 }); reg_emit32(dest, src); }
public void Shr32(X86Register32 reg) { writer.Write(new byte[] { 0xD3 }); reg_emit32((X86Register32)5, reg); }
private void reg_emit32(X86Register32 dest, X86Register32 src) { address_byte(3, (byte)(dest), (byte)(src)); }
public void Jmp(X86Register32 register) { this.writer.Write(new byte[] { 0xFF }); reg_emit32((X86Register32)0x4, register); //this.writer.Write(direct.ToInt32()); }
public void Shr64(X86Register32 left, X86Register32 right) { writer.Write(new byte[] { 0x0F, 0xAD }); reg_emit32(right, left); }
public void Pop32(X86Register32 reg) { writer.Write(new byte[] { 0x8F }); reg_emit32(0, reg); }
public void AddC32(X86Address dest, X86Register32 src) { writer.Write(new byte[] { 0x11 }); dest.Emit(writer, src); }
public void IMul32(X86Register32 dest, X86Register32 src) { writer.Write(new byte[] { 0x0F, 0xAF }); reg_emit32(dest, src); }
public void AddC32(X86Register32 dest, X86Address src) { writer.Write(new byte[] { 0x13 }); src.Emit(writer, dest); }
public void IDiv32(X86Register32 src) { writer.Write(new byte[] { 0xF7 }); reg_emit32((X86Register32)7, src); }
public void AddC32(X86Register32 dest, Int32 value) { this.writer.Write(new byte[] { 0x81 }); reg_emit32((X86Register32)0x2, dest); writer.Write(value); }
public void Shl32(X86Register32 reg) { writer.Write(new byte[] { 0xD3 }); reg_emit32((X86Register32)4, reg); }
public X86Address(X86Register32 baseRegister, Int32 offset, X86Register32 indexRegister, byte indexShift) { this.BaseRegister = baseRegister ; this.Offset = offset; this.IndexRegister = indexRegister; this.IndexShift = indexShift; }
public void Shl64(X86Address left, X86Register32 right, byte count) { writer.Write(new byte[] { 0x0F, 0xA4 }); left.Emit(writer, right); imm_emit8(count); }
public void Shl64(X86Address left, X86Register32 right) { writer.Write(new byte[] { 0x0F, 0xA5 }); left.Emit(writer, right); }
public void Or32(X86Register32 dest, X86Register32 src) { writer.Write(new byte[] { 0x09 }); reg_emit32(dest, src); }
public void Call(X86Register32 register) { this.writer.Write(new byte[] { 0xFF }); reg_emit32((X86Register32)0x2, register); //this.writer.Write(direct.ToInt32()); }
public void Or32(X86Register32 dest, X86Address src) { writer.Write(new byte[] { 0x0B }); src.Emit(writer, dest); }
public Reg32Recorder(X86Register32 register, IntPtr originalLocalCodeStart, int originalLocalCodeLength, bool originalCodeAtEnd = true, byte[] specificOriginalCode = null) : base(originalLocalCodeStart, originalLocalCodeLength, CustomCodeSize + originalLocalCodeLength, originalCodeAtEnd, specificOriginalCode) { Register = register; }
internal void Emit(BinaryWriter writer, X86Register32 otherReg) { this.Emit(writer, (byte)otherReg); }
public void Or32(X86Address dest, X86Register32 src) { writer.Write(new byte[] { 0x09 }); dest.Emit(writer, src); }
public void Or32(X86Register32 dest, Int32 value) { this.writer.Write(new byte[] { 0x81 }); reg_emit32((X86Register32)1, dest); writer.Write(value); }
public void Inc32(X86Register32 reg) { writer.Write(new byte[] { 0xFF }); reg_emit32((X86Register32)0, reg); }
public void Shr64(X86Register32 left, X86Register32 right, byte count) { writer.Write(new byte[] { 0x0F, 0xAC }); reg_emit32(right, left); imm_emit8(count); }
public void Shr64(X86Address left, X86Register32 right, byte count) { writer.Write(new byte[] { 0x0F, 0xAC }); left.Emit(writer, right); imm_emit8(count); }