public static SimpleStackTraceEntry GetStackTraceEntry(uint depth, Pointer stackFrame, Pointer eip) { var entry = new SimpleStackTraceEntry(); Pointer address; if (depth == 0 && !eip.IsNull) { address = eip; } else { if (stackFrame.IsNull) { stackFrame = Intrinsic.GetStackFrame(); } if (!eip.IsNull) { depth--; } stackFrame = GetStackFrame(depth, stackFrame); address = GetReturnAddressFromStackFrame(stackFrame); } var methodDef = Runtime.Internal.GetMethodDefinition(address); if (methodDef.IsNull) { return(entry); } entry.MethodDefinition = methodDef; entry.Offset = (uint)methodDef.Method.GetOffset(address); return(entry); }
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; }