Esempio n. 1
0
        public static SimpleStackTraceEntry GetStackTraceEntry(uint depth, uint ebp, uint eip)
        {
            var entry = new SimpleStackTraceEntry();

            uint address;

            if (depth == 0 && eip != 0)
            {
                address = eip;
            }
            else
            {
                if (ebp == 0)
                {
                    ebp = Native.GetEBP();
                }

                if (eip != 0)
                {
                    depth--;
                }

                ebp = GetStackFrame(depth, ebp);

                address = GetReturnAddressFromStackFrame(ebp);
            }

            var methodDef = GetMethodDefinition(address);

            if (methodDef == null)
            {
                return(entry);
            }

            entry.MethodDefinition = methodDef;
            entry.Offset           = address - (uint)(methodDef->Method);

            return(entry);
        }
Esempio n. 2
0
        public static SimpleStackTraceEntry GetStackTraceEntry(uint depth, IntPtr ebp, IntPtr eip)
        {
            var entry = new SimpleStackTraceEntry();

            IntPtr address;

            if (depth == 0 && eip != IntPtr.Zero)
            {
                address = eip;
            }
            else
            {
                if (ebp == IntPtr.Zero)
                {
                    ebp = Native.GetEBP();
                }

                if (eip != IntPtr.Zero)
                {
                    depth--;
                }

                ebp = GetStackFrame(depth, ebp);

                address = GetReturnAddressFromStackFrame(ebp);
            }

            var methodDef = GetMethodDefinition(address);

            if (methodDef.IsNull)
            {
                return(entry);
            }

            entry.MethodDefinition = methodDef;
            entry.Offset           = (uint)methodDef.Method.GetOffset(address);
            return(entry);
        }
Esempio n. 3
0
        public static SimpleStackTraceEntry GetStackTraceEntry(uint depth, uint ebp, uint eip)
        {
            var entry = new SimpleStackTraceEntry();

            uint address;
            if (depth == 0 && eip != 0)
                address = eip;
            else
            {
                if (ebp == 0)
                    ebp = Native.GetEBP();

                if (eip != 0)
                    depth--;

                ebp = GetStackFrame(depth, ebp);

                address = GetReturnAddressFromStackFrame(ebp);
            }

            var methodDef = GetMethodDefinition(address);

            if (methodDef == null)
                return entry;

            entry.MethodDefinition = methodDef;
            entry.Offset = address - (uint)(methodDef->Method);

            return entry;
        }