Mono.Debugger.Architectures.Architecture_X86_64.UnwindStack C# (CSharp) Method

UnwindStack() private method

private UnwindStack ( StackFrame frame, TargetMemoryAccess memory, byte code, int offset ) : StackFrame
frame StackFrame
memory TargetMemoryAccess
code byte
offset int
return StackFrame
        internal override StackFrame UnwindStack(StackFrame frame, TargetMemoryAccess memory,
							  byte[] code, int offset)
        {
            if ((code != null) && (code.Length > 4))
                return read_prologue (frame, memory, code, offset);

            TargetAddress rbp = frame.FrameAddress;

            int addr_size = TargetAddressSize;

            Registers regs = CopyRegisters (frame.Registers);

            TargetAddress new_rbp = memory.ReadAddress (rbp);
            regs [(int) X86_Register.RBP].SetValue (rbp, new_rbp);

            TargetAddress new_rip = memory.ReadAddress (rbp + addr_size);
            regs [(int) X86_Register.RIP].SetValue (rbp + addr_size, new_rip);

            TargetAddress new_rsp = rbp + 2 * addr_size;
            regs [(int) X86_Register.RSP].SetValue (rbp, new_rsp);

            rbp -= addr_size;

            return CreateFrame (frame.Thread, FrameType.Normal, memory, new_rip, new_rsp, new_rbp, regs);
        }