NS_EXPORT bool DumpHasInstructionPointerMemory(const char* dump_file) { Minidump minidump(dump_file); if (!minidump.Read()) return false; MinidumpException* exception = minidump.GetException(); MinidumpMemoryList* memory_list = minidump.GetMemoryList(); if (!exception || !memory_list) { return false; } MinidumpContext* context = exception->GetContext(); if (!context) return false; uint64_t instruction_pointer; if (!context->GetInstructionPointer(&instruction_pointer)) { return false; } MinidumpMemoryRegion* region = memory_list->GetMemoryRegionForAddress(instruction_pointer); return region != nullptr; }
NS_EXPORT bool DumpHasInstructionPointerMemory(const char* dump_file) { Minidump minidump(dump_file); if (!minidump.Read()) return false; MinidumpException* exception = minidump.GetException(); MinidumpMemoryList* memory_list = minidump.GetMemoryList(); if (!exception || !memory_list) { return false; } MinidumpContext* context = exception->GetContext(); if (!context) return false; u_int64_t instruction_pointer; switch (context->GetContextCPU()) { case MD_CONTEXT_X86: instruction_pointer = context->GetContextX86()->eip; break; case MD_CONTEXT_AMD64: instruction_pointer = context->GetContextAMD64()->rip; break; case MD_CONTEXT_ARM: instruction_pointer = context->GetContextARM()->iregs[15]; break; default: return false; } MinidumpMemoryRegion* region = memory_list->GetMemoryRegionForAddress(instruction_pointer); return region != NULL; }