waterdudu / google-breakpad

Automatically exported from code.google.com/p/google-breakpad
0 stars 0 forks source link

Bad calls need to recover the previous frame at *%esp (x86), *%rsp (x86_64), probably other CPUs too #434

Open GoogleCodeExporter opened 9 years ago

GoogleCodeExporter commented 9 years ago
When a CALL is made to bad memory, the return address gets pushed onto the 
stack, and then the instruction pointer moves to the new bad address and the 
crash occurs. Stackwalking from the topmost frame on the exception thread 
should proceed by recovering the original return address by dereferencing the 
exception context %esp, and then incrementing it by sizeof(void*).

The right condition to do this is probably when the exception context %eip 
points to unmapped memory, or more directly, when the crash reason indicates a 
bad memory access and the address matches the exception context %eip.

We’re currently skipping over the most important frame in these crashes, the 
one that made the bad CALL.

Original issue reported on code.google.com by mark@chromium.org on 15 Jul 2011 at 9:06

GoogleCodeExporter commented 9 years ago

Original comment by ted.mielczarek on 31 Aug 2011 at 4:23

GoogleCodeExporter commented 9 years ago
http://crash doesn't show the call stack properly for the following crash id. 
But windbg shows it correctly.

ae2cf884168ba214

Original comment by rtenneti@chromium.org on 18 Dec 2012 at 5:42