某App啓動後Native層就會Crash,但是由於它集成了google_breakpad,將Native層的異常全部捕獲並處理了,所以看不到任何的異常信息,只有這麼一段:
06-24 14:22:45.165 570 570 I Zygote : Process 7047 exited due to signal (11)
通過分析它是集成了google_breakpad,於是找到google_breakpad::ExceptionHandler()函數:
Hook此函數:
HOOK_DEF(void *, _ZN15google_breakpad16ExceptionHandlerC1ERKNS_18MinidumpDescriptorEPFbPvEPFbS3_S4_bES4_bi, void *p,void *p2,void *p3,void *p4,
bool b,int i) {
ALOGE("1111111111 enter ExceptionHandler()....");
return NULL;
}
AntiMethodInfo antiMethodsInfo[] = {
{"_ZN15google_breakpad16ExceptionHandlerC1ERKNS_18MinidumpDescriptorEPFbPvEPFbS3_S4_bES4_bi",
(void *) new__ZN15google_breakpad16ExceptionHandlerC1ERKNS_18MinidumpDescriptorEPFbPvEPFbS3_S4_bES4_bi,
(void *) orig__ZN15google_breakpad16ExceptionHandlerC1ERKNS_18MinidumpDescriptorEPFbPvEPFbS3_S4_bES4_bi}
};
void disableGoogleBreakpad(const char *name) {
void *handle = fake_dlopen(name, 0);
for (int i = 0; i < sizeof(antiMethodsInfo) / sizeof(antiMethodsInfo[0]); i++) {
void *symbol = fake_dlsym(handle, antiMethodsInfo[i].name);
if (symbol) {
MSHookFunction(symbol,
(void *) antiMethodsInfo[i].newFunc), (void **) &(antiMethodsInfo[i].origFunc);
}
}
}
於是終於可以看到此APP的Crash信息: