3 ms·
Generally what we do when we fall back to scanning depends on the architecture. For x86 you can find the logic here: https://github.com/rust-minidump/rust-minid
by the_mitsuhiko 4y ago
Generally what we do when we fall back to scanning depends on the architecture. For x86 you can find the logic here: https://github.com/rust-minidump/rust-minidump/blob/77638ab70b2e2c0ded1317ca175b0fb8a75fd477/minidump-processor/src/stackwalker/x86.rs#L199 https://github.com/rust-minidump/rust-minidump/blob/77638ab7...
Since we do post-hoc stack walking our ability to actually look at the assembly is limited. In most cases where we have no CFI we also do not have the binary to begin with, so we're in random memory land.
- userbinator 4y agoIf we find such an instruction, we assume it's an ip value that was pushed by the CALL instruction that created the current frame. I'm not familiar with Rust, but if I'm reading it correctly, you're not doing back-disassembly and only checking if an address on the stack is in a code region, which certainly won't work well. we also do not have the binary to begin with Your "minidumps" only contain the stack?
- js2 4y agoMinidumps only contain the stack, yes, along with additional metadata, but not the original executable. This is an old format that I think Microsoft originally designed and that Google extended for the breakpad project. It's used by Chrome and Mozilla also uses it for Firefox. It's essentially a crash reporting binary format. I linked you to it elsewhere in this thread. Sentry is using a rust implementation of the stack walker.