Example #1
0
        static void Main(string[] args)
        {
            Assembly sampleAssembly;

            sampleAssembly = Assembly.LoadFrom("../../../ExternalLibrary/bin/debug/ExternalLibrary.dll");
            // Obtain a reference to a method known to exist in assembly.
            // MethodInfo method = sampleAssembly.GetTypes()[0].GetMethod("PrintEverything");
            object print = sampleAssembly.CreateInstance("ExternalLibrary.Person");
            //method.Invoke(print, null);
            IPrintable p = print as IPrintable;

            p.PrintEverything();

            Assembly secretAssembly;

            secretAssembly = Assembly.LoadFrom("Lab1SecretCode.Patched.dll");
            // Obtain a reference to a method known to exist in assembly.
            IEnumerable <Type> types = from type in secretAssembly.GetTypes()
                                       select type;

            Type[] secretTypesArray = types.ToArray();

            MethodInfo [] method = secretTypesArray[0].GetMethods();

            // foreach and console writeline every entry in secretTypesArray and print the FullName property

            //foreach (Type type1 in secretTypesArray)
            //{
            //    Console.WriteLine(type1);
            //    Console.WriteLine(type1.FullName);
            //}

            object printSecret = secretAssembly.CreateInstance("Lab1SecretCode.Lab1Secret");

            foreach (MethodInfo method1 in method)
            {
                Console.WriteLine(method1);
            }

            String message = "secret";


            Console.WriteLine(method[0].Invoke(printSecret, new object[] { message }));
            FieldInfo flagInfo = secretTypesArray[0].GetFields(BindingFlags.NonPublic | BindingFlags.Instance).FirstOrDefault(x => x.Name == "flag");
            int       flag     = (int)flagInfo.GetValue(printSecret);

            flagInfo.SetValue(printSecret, 99);
            Console.WriteLine(method[1].Invoke(printSecret, null));


            Console.WriteLine(method[2].Invoke(printSecret, null));



            //sampleAssembly.GetExportedTypes();

            //method.Invoke(print, null);


            Console.ReadLine();
        }