모노에서 Mono.Cecil 형식으로 파싱하는 중입니다. 유형 구문 분석이 getter에 액세스하는지 어떻게 확인할 수 있습니까? 다른 클래스의 메소드? 필드에 액세스하기위한CIL 지침 : getter 메서드가 호출되는지 확인하십시오.
직접 나는 해결책 발견 :
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.");
}
}
}
}
을하지만 다른 클래스의 필드가 getter 메소드에 액세스하면 나는 문제를 해결할 수있는 방법?
질문을 단순화하려면 : 방법이 CIL 명령을 사용하는 getter 메서드인지 어떻게 확인할 수 있습니까? 어떻게 어떤 필드가 반환되는지 감지 할 수 있습니까?
getter가 반드시 필드를 반환 할 필요는 없습니다. 상수 값을 반환 할 수 있습니다. 필드를 결합하는 일부 수학을 수행 할 수 있습니다. 난수를 반환 할 수 있습니다. 꽤 많이. – Donnie
네, 알고 있습니다. 그래서 그걸 확인하고 싶습니다. –