static void Main(string[] args) { MethodTableInfo firstTableInfo, secondTableInfo; EntityInfoPtr first_entityptr, second_entityptr; var customer = new Customer(); /*taking address from Customer*/ { var safeptr1 = SafePtr.Create(customer); first_entityptr = new EntityInfoPtr(safeptr1.IntPtr - IntPtr.Size); var first_mtintptr = first_entityptr.Reference.mt.MtPointer; firstTableInfo = new MethodTablePtr(first_mtintptr - IntPtr.Size).Reference.mt; Console.WriteLine("Contents: {0}, {1}", firstTableInfo.Size, firstTableInfo.MethodsCount); } /*taking address from Client*/ { var safeptr2 = SafePtr.Create(new Client()); second_entityptr = new EntityInfoPtr(safeptr2.IntPtr - IntPtr.Size); var second_mtintptr = second_entityptr.Reference.mt.MtPointer; secondTableInfo = new MethodTablePtr(second_mtintptr - IntPtr.Size).Reference.mt; Console.WriteLine("Contents: {0}, {1}", secondTableInfo.Size, secondTableInfo.MethodsCount); } Console.WriteLine("Customer before mt rewritting: {0}", customer); // changing methods table address first_entityptr.Reference.mt.MtPointer = second_entityptr.Reference.mt.MtPointer; Console.WriteLine("Customer after mt rewritting: {0}", customer); Console.ReadKey(); }
public void foo() { // MethodTableInfo firsTableInfo, secondTableInfo; // EntityInfoPtr first_entityptr, second_entityptr; var customer = new Customer(); var dd = new Data(); //var s = PtrConverter.Convert(new object()); /*taking address from Customer* { var safeptr1 = SafePtr.Create(customer); first_entityptr = new EntityInfoPtr(safeptr1.IntPtr - IntPtr.Size); var first_mtintptr = first_entityptr.Reference.mt.MtPointer; firsTableInfo = new MethodTablePtr(first_mtintptr - IntPtr.Size).Reference.mt; Console.WriteLine("Contents: {0}, {1}", firsTableInfo.Size, firsTableInfo.MethodsCount); } /*taking address from Client* { var safeptr2 = SafePtr.Create(new Client()); second_entityptr = new EntityInfoPtr(safeptr2.IntPtr - IntPtr.Size); var second_mtintptr = second_entityptr.Reference.mt.MtPointer; secondTableInfo = new MethodTablePtr(second_mtintptr - IntPtr.Size).Reference.mt; Console.WriteLine("Contents: {0}, {1}", secondTableInfo.Size, secondTableInfo.MethodsCount); } Console.WriteLine("Customer before mt rewritting: {0}", customer); // changing methods table address first_entityptr.Reference.mt.MtPointer = second_entityptr.Reference.mt.MtPointer; Console.WriteLine("Customer after mt rewritting: {0}", customer); * */ }