Пример #1
0
 public X86Address(X86Register32 baseRegister, Int32 offset)
 {
     this.BaseRegister  = baseRegister;
     this.Offset        = offset;
     this.IndexRegister = X86Register32.None;
     this.IndexShift    = 0;
 }
Пример #2
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);
     }
 }
Пример #3
0
 public X86Address(X86Register32 baseRegister, Int32 offset, X86Register32 indexRegister, byte indexShift)
 {
     this.BaseRegister  = baseRegister;
     this.Offset        = offset;
     this.IndexRegister = indexRegister;
     this.IndexShift    = indexShift;
 }
Пример #4
0
		public void ByteSwap(X86Register32 reg) {
			writer.Write(
				new byte[] {
					0x0F,
					(byte)(0xC8 | (byte)reg)
				}
			);
		}
Пример #5
0
 public void ByteSwap(X86Register32 reg)
 {
     writer.Write(
         new byte[] {
         0x0F,
         (byte)(0xC8 | (byte)reg)
     }
         );
 }
Пример #6
0
		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);
			}
		}
Пример #7
0
 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);
     }
 }
Пример #8
0
 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);
 }
Пример #9
0
 public void Shl64(X86Register32 left, X86Register32 right)
 {
     writer.Write(new byte[] { 0x0F, 0xA5 });
     reg_emit32(right, left);
 }
Пример #10
0
		public void Cmp32(X86Register32 dest, Int32 src) {
			writer.Write(new byte[] { 0x81 });
			reg_emit32((X86Register32)7, dest);
			imm_emit32(src);
		}
Пример #11
0
 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);
		}
Пример #13
0
		public void Shr64(X86Address left, X86Register32 right) {
			writer.Write(new byte[] { 0x0F, 0xAD });
			left.Emit(writer, right);
		}
Пример #14
0
 public void Cmp32(X86Register32 dest, Int32 src)
 {
     writer.Write(new byte[] { 0x81 });
     reg_emit32((X86Register32)7, dest);
     imm_emit32(src);
 }
Пример #15
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);
			}
		}
Пример #16
0
		public void Mov32(X86Address dest, X86Register32 src) {
			this.writer.Write(new byte[] { 0x89 });
			dest.Emit(writer, src);
		}
Пример #17
0
		public void Mov32(X86Register32 dest, X86Address src) {
			this.writer.Write(new byte[] { 0x8b });
			src.Emit(writer, dest);
		}
Пример #18
0
 public void Mov32(X86Register32 dest, X86Address src)
 {
     this.writer.Write(new byte[] { 0x8b });
     src.Emit(writer, dest);
 }
Пример #19
0
		public void Mov32(X86Register32 dest, Int32 value) {
			this.writer.Write(new byte[] { 0xc7 });
			reg_emit32(0, dest);
			writer.Write(value);
		}
Пример #20
0
 public void Mov32(X86Address dest, X86Register32 src)
 {
     this.writer.Write(new byte[] { 0x89 });
     dest.Emit(writer, src);
 }
Пример #21
0
 public void Mov32(X86Register32 dest, Int32 value)
 {
     this.writer.Write(new byte[] { 0xc7 });
     reg_emit32(0, dest);
     writer.Write(value);
 }
Пример #22
0
		public void Negate32(X86Register32 dest) {
			writer.Write(new byte[] { 0xF7 });
			reg_emit32((X86Register32)3, dest);
		}
Пример #23
0
		public void Mul32(X86Register32 src) {
			writer.Write(new byte[] { 0xF7 });
			reg_emit32((X86Register32)4, src);
		}
Пример #24
0
		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);
 }
Пример #26
0
		public void AddC32(X86Register32 dest, X86Register32 src) {
			writer.Write(new byte[] { 0x11 });
			reg_emit32(dest, src);
		}
Пример #27
0
		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);
		}
Пример #28
0
		public void Shr32(X86Register32 reg) {
			writer.Write(new byte[] { 0xD3 });
			reg_emit32((X86Register32)5, reg);
		}
Пример #29
0
 private void reg_emit32(X86Register32 dest, X86Register32 src)
 {
     address_byte(3, (byte)(dest), (byte)(src));
 }
Пример #30
0
 public void Jmp(X86Register32 register)
 {
     this.writer.Write(new byte[] { 0xFF });
     reg_emit32((X86Register32)0x4, register);
     //this.writer.Write(direct.ToInt32());
 }
Пример #31
0
		public void Shr64(X86Register32 left, X86Register32 right) {
			writer.Write(new byte[] { 0x0F, 0xAD });
			reg_emit32(right, left);
		}
Пример #32
0
		public void Pop32(X86Register32 reg) {
			writer.Write(new byte[] { 0x8F });
			reg_emit32(0, reg);
		}
Пример #33
0
		public void AddC32(X86Address dest, X86Register32 src) {
			writer.Write(new byte[] { 0x11 });
			dest.Emit(writer, src);
		}
Пример #34
0
		public void IMul32(X86Register32 dest, X86Register32 src) {
			writer.Write(new byte[] { 0x0F, 0xAF });
			reg_emit32(dest, src);
		}
Пример #35
0
 public void IMul32(X86Register32 dest, X86Register32 src)
 {
     writer.Write(new byte[] { 0x0F, 0xAF });
     reg_emit32(dest, src);
 }
Пример #36
0
		public void AddC32(X86Register32 dest, X86Address src) {
			writer.Write(new byte[] { 0x13 });
			src.Emit(writer, dest);
		}
Пример #37
0
 public void IDiv32(X86Register32 src)
 {
     writer.Write(new byte[] { 0xF7 });
     reg_emit32((X86Register32)7, src);
 }
Пример #38
0
		public void AddC32(X86Register32 dest, Int32 value) {
			this.writer.Write(new byte[] { 0x81 });
			reg_emit32((X86Register32)0x2, dest);
			writer.Write(value);
		}
Пример #39
0
 public void Shl32(X86Register32 reg)
 {
     writer.Write(new byte[] { 0xD3 });
     reg_emit32((X86Register32)4, reg);
 }
Пример #40
0
		public X86Address(X86Register32 baseRegister, Int32 offset, X86Register32 indexRegister, byte indexShift) {
			this.BaseRegister = baseRegister ;
			this.Offset = offset;
			this.IndexRegister = indexRegister;
			this.IndexShift = indexShift;
		}
Пример #41
0
 public void Shl64(X86Address left, X86Register32 right, byte count)
 {
     writer.Write(new byte[] { 0x0F, 0xA4 });
     left.Emit(writer, right);
     imm_emit8(count);
 }
Пример #42
0
		public X86Address(X86Register32 baseRegister, Int32 offset) {
			this.BaseRegister = baseRegister;
			this.Offset = offset;
			this.IndexRegister = X86Register32.None;
			this.IndexShift = 0;
		}
Пример #43
0
 public void Shl64(X86Address left, X86Register32 right)
 {
     writer.Write(new byte[] { 0x0F, 0xA5 });
     left.Emit(writer, right);
 }
Пример #44
0
 public void Or32(X86Register32 dest, X86Register32 src)
 {
     writer.Write(new byte[] { 0x09 });
     reg_emit32(dest, src);
 }
Пример #45
0
		public void Call(X86Register32 register) {
			this.writer.Write(new byte[] { 0xFF });
			reg_emit32((X86Register32)0x2, register);
			//this.writer.Write(direct.ToInt32());
		}
Пример #46
0
 public void Or32(X86Register32 dest, X86Address src)
 {
     writer.Write(new byte[] { 0x0B });
     src.Emit(writer, dest);
 }
 public void CmpXChg32(X86Address dest, X86Register32 src)
 {
     writer.Write(new byte[] { 0x0F, 0xB1 });
     dest.Emit(writer, src);
 }
Пример #48
0
 public void Negate32(X86Register32 dest)
 {
     writer.Write(new byte[] { 0xF7 });
     reg_emit32((X86Register32)3, dest);
 }
Пример #49
0
 public Reg32Recorder(X86Register32 register, IntPtr originalLocalCodeStart, int originalLocalCodeLength, bool originalCodeAtEnd = true, byte[] specificOriginalCode = null) 
     : base(originalLocalCodeStart, originalLocalCodeLength, CustomCodeSize + originalLocalCodeLength, originalCodeAtEnd, specificOriginalCode)
 {
     Register = register;
 }
Пример #50
0
		internal void Emit(BinaryWriter writer, X86Register32 otherReg) {
			this.Emit(writer, (byte)otherReg);
		}
Пример #51
0
 public void Or32(X86Address dest, X86Register32 src)
 {
     writer.Write(new byte[] { 0x09 });
     dest.Emit(writer, src);
 }
Пример #52
0
 internal void Emit(BinaryWriter writer, X86Register32 otherReg)
 {
     this.Emit(writer, (byte)otherReg);
 }
Пример #53
0
 public void Or32(X86Register32 dest, Int32 value)
 {
     this.writer.Write(new byte[] { 0x81 });
     reg_emit32((X86Register32)1, dest);
     writer.Write(value);
 }
Пример #54
0
 public void Pop32(X86Register32 reg)
 {
     writer.Write(new byte[] { 0x8F });
     reg_emit32(0, reg);
 }
Пример #55
0
		private void reg_emit32(X86Register32 dest, X86Register32 src) {
			address_byte(3, (byte)(dest), (byte)(src));
		}
Пример #56
0
		public void Inc32(X86Register32 reg) {
			writer.Write(new byte[] { 0xFF });
			reg_emit32((X86Register32)0, reg);
		}
Пример #57
0
		public void Shr64(X86Register32 left, X86Register32 right, byte count) {
			writer.Write(new byte[] { 0x0F, 0xAC });
			reg_emit32(right, left);
			imm_emit8(count);
		}
Пример #58
0
		public void Shr64(X86Address left, X86Register32 right, byte count) {
			writer.Write(new byte[] { 0x0F, 0xAC });
			left.Emit(writer, right);
			imm_emit8(count);
		}
Пример #59
0
 public void Inc32(X86Register32 reg)
 {
     writer.Write(new byte[] { 0xFF });
     reg_emit32((X86Register32)0, reg);
 }
		public void CmpXChg32(X86Register32 dest, X86Register32 src) {
			writer.Write(new byte[] { 0x0F, 0xB1 });
			reg_emit32(src, dest);
		}