void Initialize()
 {
     generation.ReadOriginalValue = () => {
         InitializeRawRow();
         return(rawRow.Generation);
     };
     name.ReadOriginalValue = () => {
         InitializeRawRow();
         return(readerModule.StringsStream.ReadNoNull(rawRow.Name));
     };
     mvid.ReadOriginalValue = () => {
         InitializeRawRow();
         return(readerModule.GuidStream.Read(rawRow.Mvid));
     };
     encId.ReadOriginalValue = () => {
         InitializeRawRow();
         return(readerModule.GuidStream.Read(rawRow.EncId));
     };
     encBaseId.ReadOriginalValue = () => {
         InitializeRawRow();
         return(readerModule.GuidStream.Read(rawRow.EncBaseId));
     };
     assembly.ReadOriginalValue = () => {
         if (rid != 1)
         {
             return(null);
         }
         return(readerModule.ResolveAssembly(1));
     };
     nativeEntryPoint.ReadOriginalValue = () => {
         return(readerModule.GetNativeEntryPoint());
     };
     managedEntryPoint.ReadOriginalValue = () => {
         return(readerModule.GetManagedEntryPoint());
     };
 }
Beispiel #2
0
        public static void Run()
        {
            /* Saját dll-t készítettem, a filename a path és egy ModuleDefMD típusú objektumba ezt betöltöm*/

            //string filename = "C:\\Users\\Zsolti\\Desktop\\önlab\\MyClassLibrary\\MyClassLibrary\\MyClassLibrary\\bin\\Debug\\MyClassLibrary.dll";

            /* Algorithms vizsgálata */
            //string filename = @"C:\Users\Zsolti\Desktop\C-Sharp-Algorithms-master\C-Sharp-Algorithms-master\Algorithms\bin\Debug\Algorithms.dll";
            /* DataStructures vizsgálata */
            string      filename = @"C:\Users\Zsolti\Desktop\C-Sharp-Algorithms-master\C-Sharp-Algorithms-master\DataStructures\bin\Debug\DataStrcutres.dll";
            ModuleDefMD mod      = ModuleDefMD.Load(filename);


            int totalNumTypes = 0;

            /* Kiírjuk a betöltött assembly nevét */
            Console.WriteLine(mod.Assembly.FullName);
            for (int i = 0; i < 5; i++)
            {
                Console.WriteLine();
            }
            Thread.Sleep(1000);


            if (mod.GetManagedEntryPoint() == null)
            {
                Console.WriteLine(" Managed entry point is NULL! ");
            }



            // mod.Types only returns non-nested types.
            // mod.GetTypes() returns all types, including nested types.
            foreach (TypeDef type in mod.GetTypes())
            {
                totalNumTypes++;

                for (int i = 0; i < 5; i++)
                {
                    Console.WriteLine("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
                }


                ////// TYPE //////
                Console.WriteLine();
                Console.WriteLine("Type: {0}", type.FullName);
                if (type.BaseType != null)
                {
                    Console.WriteLine("  Base type: {0}", type.BaseType.FullName);
                }

                Console.WriteLine("  Methods: {0}", type.Methods.Count);
                Console.WriteLine("  Fields: {0}", type.Fields.Count);
                Console.WriteLine("  Properties: {0}", type.Properties.Count);
                Console.WriteLine("  Events: {0}", type.Events.Count);
                Console.WriteLine("  Nested types: {0}", type.NestedTypes.Count);
                Console.WriteLine("  Visibility: {0}", type.Visibility);
                Console.WriteLine("  TypeOrMethodDefTag: {0}", type.TypeOrMethodDefTag);


                if (type.Interfaces.Count > 0)
                {
                    Console.WriteLine("  Interfaces:");
                    foreach (InterfaceImpl iface in type.Interfaces)
                    {
                        Console.WriteLine("    {0}", iface.Interface.FullName);
                    }
                }

                Console.WriteLine();
                Console.WriteLine(" METHODS IN A TYPE / CLASS ");
                Console.WriteLine("-------------------------------------");

                //// Type-on belül methodok ////

                foreach (var method in type.Methods)
                {
                    Console.WriteLine();
                    Console.WriteLine("Method Name: {0}", method.Name);
                    //Console.WriteLine("Method Parameters: {0}", method.Parameters);

                    // A függvényből megcsináljuk a CFG-t
                    ControlFlowGraph graph = ControlFlowGraph.Construct(method.Body);

                    Console.WriteLine("==============================");
                    // Blokkok száma a CFG-ben
                    Console.WriteLine("Count (Numbers of blocks in CFG)) : {0}", graph.Count);
                    Console.WriteLine("Instructions:");

                    foreach (var block in graph.GetAllBlocks())
                    {
                        // Az adott instrukció ID-ja
                        Console.WriteLine("instr: {0}", block.Id);

                        // Az adott blokk forrás blokkja
                        foreach (var source in block.Sources)
                        {
                            Console.WriteLine("Source: " + source.Id);
                        }

                        // Az adott blokk cél blokkja
                        foreach (var target in block.Targets)
                        {
                            Console.WriteLine("Target: " + target.Id);
                        }

                        //Console.WriteLine("Footer: {0}", block.Footer.ToString());
                        //Console.WriteLine("Header: {0}", block.Header.ToString());

                        Console.WriteLine();
                    }

                    Console.WriteLine("==============================");
                }
            }

            for (int i = 0; i < 5; i++)
            {
                Console.WriteLine("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
            }
            Console.WriteLine();
            Console.WriteLine("Total number of types: {0}", totalNumTypes);
        }