コード例 #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
ファイル: X86Writer.cs プロジェクト: YHVHvx/managed-x86
		public void ByteSwap(X86Register32 reg) {
			writer.Write(
				new byte[] {
					0x0F,
					(byte)(0xC8 | (byte)reg)
				}
			);
		}
コード例 #5
0
ファイル: X86Writer.cs プロジェクト: biaouch/DaS-BRush
 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);
 }
コード例 #12
0
		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
ファイル: X86Writer.Compare.cs プロジェクト: inrg/X86.Interop
 public void Cmp32(X86Register32 dest, Int32 src)
 {
     writer.Write(new byte[] { 0x81 });
     reg_emit32((X86Register32)7, dest);
     imm_emit32(src);
 }
コード例 #15
0
ファイル: X86Address.cs プロジェクト: YHVHvx/managed-x86
		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
ファイル: X86Writer.Move.cs プロジェクト: YHVHvx/managed-x86
		public void Mov32(X86Address dest, X86Register32 src) {
			this.writer.Write(new byte[] { 0x89 });
			dest.Emit(writer, src);
		}
コード例 #17
0
ファイル: X86Writer.Move.cs プロジェクト: YHVHvx/managed-x86
		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
ファイル: X86Writer.Move.cs プロジェクト: YHVHvx/managed-x86
		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
ファイル: X86Writer.Move.cs プロジェクト: YHVHvx/managed-x86
		public void Mov32(X86Register32 dest, X86Register32 src) {
			writer.Write(new byte[] { 0x8b });
			reg_emit32(dest, src);
		}
コード例 #25
0
 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
ファイル: X86Address.cs プロジェクト: YHVHvx/managed-x86
		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
ファイル: X86Writer.cs プロジェクト: biaouch/DaS-BRush
 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
ファイル: X86Writer.Pop.cs プロジェクト: YHVHvx/managed-x86
		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
ファイル: X86Address.cs プロジェクト: YHVHvx/managed-x86
		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
ファイル: X86Address.cs プロジェクト: YHVHvx/managed-x86
		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
ファイル: X86Writer.Or.cs プロジェクト: RaphaelK12/DSFBX
 public void Or32(X86Register32 dest, X86Register32 src)
 {
     writer.Write(new byte[] { 0x09 });
     reg_emit32(dest, src);
 }
コード例 #45
0
ファイル: X86Writer.Call.cs プロジェクト: YHVHvx/managed-x86
		public void Call(X86Register32 register) {
			this.writer.Write(new byte[] { 0xFF });
			reg_emit32((X86Register32)0x2, register);
			//this.writer.Write(direct.ToInt32());
		}
コード例 #46
0
ファイル: X86Writer.Or.cs プロジェクト: RaphaelK12/DSFBX
 public void Or32(X86Register32 dest, X86Address src)
 {
     writer.Write(new byte[] { 0x0B });
     src.Emit(writer, dest);
 }
コード例 #47
0
 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
ファイル: Reg32Recorder.cs プロジェクト: RaphaelK12/DSFBX
 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
ファイル: X86Address.cs プロジェクト: YHVHvx/managed-x86
		internal void Emit(BinaryWriter writer, X86Register32 otherReg) {
			this.Emit(writer, (byte)otherReg);
		}
コード例 #51
0
ファイル: X86Writer.Or.cs プロジェクト: RaphaelK12/DSFBX
 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
ファイル: X86Writer.Or.cs プロジェクト: RaphaelK12/DSFBX
 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
ファイル: X86Writer.cs プロジェクト: YHVHvx/managed-x86
		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);
 }
コード例 #60
0
		public void CmpXChg32(X86Register32 dest, X86Register32 src) {
			writer.Write(new byte[] { 0x0F, 0xB1 });
			reg_emit32(src, dest);
		}