Im Parsing durch einen Typ mit Mono.Cecil. Wie kann ich prüfen, ob der Typ im Parsing auf Getter-Methoden anderer Klassen zugreift?CIL Anweisungen: Überprüfen Sie, ob eine Getter-Methode aufgerufen wird?
Für die Felder direkt Zugriff Ich habe eine Lösung gefunden:
foreach (MethodDefinition method in type.Methods)
{
foreach (Instruction instruction in method.Body.Instructions)
{
if (instruction.OpCode == OpCodes.Ldfld)
{
FieldReference field = instruction.Operand as FieldReference;
if (fields.Contains(field.ToString()) && !accesses.Contains(field.ToString()))
{
accesses.Add(field.ToString());
Console.WriteLine("Class " + type.Name + " accesses field " + field.Name + " of a foreign class.");
}
}
}
}
Aber wie kann ich das Problem lösen, wenn das Feld einer anderen Klasse durch eine Getter-Methode zugegriffen wird?
Oder um die Frage zu vereinfachen: Wie kann ich feststellen, ob eine Methode eine Getter-Methode mit CIL-Anweisungen ist? und wie kann ich erkennen, welches Feld zurückgegeben wird?
Ein Getter muss nicht immer ein Feld zurückgeben. Es kann einen konstanten Wert zurückgeben, es kann einige Berechnungen durchführen, um Felder zu kombinieren. Es kann eine Zufallszahl zurückgeben. So ziemlich alles. – Donnie
Ja, ich bin mir dessen bewusst. Deshalb möchte ich es überprüfen. –