Laden...

Mono.Cecil Alle referenzen eines Types.

Erstellt von Ayke vor 13 Jahren Letzter Beitrag vor 13 Jahren 712 Views
Ayke Themenstarter:in
643 Beiträge seit 2006
vor 13 Jahren
Mono.Cecil Alle referenzen eines Types.

Ich schreibe grade einen Obfuscator. Hab schon einiges gelöst aber leider nicht so wie ich es mir vorstelle. Gibt es eine möglichkeit mit Mono.Cecil alle referenzen (Abhängigkeiten) eines Types zu bekommen.

1.044 Beiträge seit 2008
vor 13 Jahren

Hallo Ayke,

ich kann dir das so aus dem Stehgreif nicht sagen. Hier das Projekt baut auch auf Mono.Cecil auf. Das wird die bestimmt weiterhelfen. Es ist ein fertiger Obfuscator, da kannst du bestimmt den ein oder anderen Code-Snippet verwenden.

zero_x

Ayke Themenstarter:in
643 Beiträge seit 2006
vor 13 Jahren

danke erstmal, aber leider habe ich mir das schon angeschaut. Das programm benutzt eine alte version von Cecil und ist nicht grade elegant geschrieben.

        private void GetAllReferences()
        {
            foreach (TypeDefinition td in _Assembly_ExecDefinition.MainModule.Types)
            {
                foreach (MethodDefinition md in td.Methods)
                {
                    if (md.HasBody)
                        foreach (Instruction instruction in md.Body.Instructions)
                        {
                            switch (instruction.OpCode.Name)
                            {
                                case "call":
                                case "callvirt":
                                case "newobj":

                                    _list_MethodeReferences.Add ((MethodReference)instruction.Operand);
                                    break;

                                case "stfld":
                                case "ldfld":

                                    _list_FieldReferences.Add ((FieldReference)instruction.Operand);
                                    break;
                            }
                        }
                }
            }
        }

Damit bekomme ich z.b calls innerhalb einer Methode. Danach gehe ich die liste nochmal durch und vergleiche alle anweisungen mit Methoden- Definitionen. Leider crasht das Programm wenn ich auch alle Unterklassen einbeziehe. Warum weiss ich nicht und ich weiss auch nicht wie ich das zurück verfolgen kann.