protected StackFrame UnwindStack(StackFrame frame, TargetMemoryAccess memory)
{
if ((frame.TargetAddress < StartAddress) || (frame.TargetAddress > EndAddress))
{
return(null);
}
StackFrame new_frame;
try {
new_frame = Architecture.TrySpecialUnwind(frame, memory);
if (new_frame != null)
{
return(new_frame);
}
} catch {
}
try {
if (frame_reader != null)
{
new_frame = frame_reader.UnwindStack(frame, memory, Architecture);
if (new_frame != null)
{
return(new_frame);
}
}
if (eh_frame_reader != null)
{
new_frame = eh_frame_reader.UnwindStack(frame, memory, Architecture);
if (new_frame != null)
{
return(new_frame);
}
}
} catch {
return(null);
}
return(null);
}