UnwindStack() private method

private UnwindStack ( StackFrame last_frame, TargetMemoryAccess memory ) : StackFrame
last_frame StackFrame
memory TargetMemoryAccess
return StackFrame
Example #1
0
        internal StackFrame UnwindStack(StackFrame frame, TargetMemoryAccess memory)
        {
            if (!IsLoaded)
            {
                return(null);
            }

            try {
                StackFrame new_frame = Module.UnwindStack(frame, memory);
                if (new_frame != null)
                {
                    return(new_frame);
                }
            } catch {
            }

            int prologue_size;

            if (HasMethodBounds)
            {
                prologue_size = (int)(MethodStartAddress - StartAddress);
            }
            else
            {
                prologue_size = (int)(EndAddress - StartAddress);
            }
            int offset = (int)(frame.TargetAddress - StartAddress);

            byte[] prologue = memory.ReadBuffer(StartAddress, prologue_size);
            return(frame.Thread.Architecture.UnwindStack(frame, memory, prologue, offset));
        }