Mono.Debugger.Architectures.X86_Instruction.CheckTrampoline C# (CSharp) 메소드

CheckTrampoline() 공개 메소드

public CheckTrampoline ( TargetMemoryAccess memory, TargetAddress &trampoline ) : TrampolineType
memory TargetMemoryAccess
trampoline TargetAddress
리턴 TrampolineType
        public override TrampolineType CheckTrampoline(TargetMemoryAccess memory,
								out TargetAddress trampoline)
        {
            if (InstructionType == Type.Call) {
                TargetAddress target = GetEffectiveAddress (memory);
                if (target.IsNull) {
                    trampoline = TargetAddress.Null;
                    return TrampolineType.None;
                }

                bool is_start;
                if (Opcodes.Process.OperatingSystem.GetTrampoline (
                        memory, target, out trampoline, out is_start)) {
                    target = trampoline;
                    return is_start ?
                        TrampolineType.NativeTrampolineStart :
                        TrampolineType.NativeTrampoline;
                }
            }

            if ((InstructionType != Type.Call) && (InstructionType != Type.IndirectCall)) {
                trampoline = TargetAddress.Null;
                return TrampolineType.None;
            }

            if (Opcodes.Process.IsManagedApplication) {
                TargetAddress target = GetEffectiveAddress (memory);
                if (target.IsNull) {
                    trampoline = TargetAddress.Null;
                    return TrampolineType.None;
                }

                if (Opcodes.Process.MonoLanguage.IsDelegateTrampoline (target)) {
                    trampoline = target;
                    return TrampolineType.DelegateInvoke;
                }

                if (GetMonoTrampoline (memory, target, out trampoline))
                    return TrampolineType.MonoTrampoline;
            }

            trampoline = TargetAddress.Null;
            return TrampolineType.None;
        }