Try to print a possible message from PushStackTraceAndDie. Returns the first address where the normal stack starts again.
(self, f, start=None, print_message=True)
| 2983 | return |
| 2984 | |
| 2985 | def try_output_stack_trace(self, f, start=None, print_message=True): |
| 2986 | """ |
| 2987 | Try to print a possible message from PushStackTraceAndDie. |
| 2988 | Returns the first address where the normal stack starts again. |
| 2989 | """ |
| 2990 | # Only look at the first 1k words on the stack |
| 2991 | ptr_size = self.reader.MachinePointerSize() |
| 2992 | if start is None: |
| 2993 | start = self.reader.ExceptionSP() |
| 2994 | if not self.reader.IsValidAddress(start): |
| 2995 | return start |
| 2996 | end = start + ptr_size * 1024 * 4 |
| 2997 | for slot in range(start, end, ptr_size): |
| 2998 | if not self.reader.IsValidAddress(slot + ptr_size): |
| 2999 | break |
| 3000 | magic = self.reader.ReadUIntPtr(slot) |
| 3001 | if magic == STACK_TRACE_MARKER: |
| 3002 | return self.output_stack_trace(f, slot, start, end, print_message) |
| 3003 | return start |
| 3004 | |
| 3005 | def output_stack_trace(self, f, slot, start, end, print_message): |
| 3006 | ptr_size = self.reader.MachinePointerSize() |
no test coverage detected