OOMDetector
OOMDetector copied to clipboard
怎么调用的common_stack_logger
这个函数怎么调用的,谢谢啦
hook了malloc_zone_malloc 但是没发现在那里hook
利用了libmalloc 中的某个函数指针
去苹果开源库看看libmalloc的代码
利用了libmalloc 中的某个函数指针

大概了解了,malloc_logger 是一个钩子函数
hook到了common_stack_logger这个函数上实现了自定义的调用,但是这么做的代价就是disable了系统对于malloc_logger的实现(比如源码中的这个功能
turn_on_stack_logging
)
注册此类全局函数指针应该保存之前的注册,并在自己的实现中回调回去,否则如果其他组件也想检测malloc调用,就会被后来的注册者冲掉
malloc_logger_t *oom_pre_malloc_logger;
- (void)registerMallocLogger {
//save previous
if (malloc_logger && malloc_logger != common_stack_logger) {
oom_pre_malloc_logger = malloc_logger;
}
malloc_logger = (malloc_logger_t *)common_stack_logger;
}
extern malloc_logger_t *ra_oom_pre_malloc_logger;
void common_stack_logger(uint32_t type, uintptr_t arg1, uintptr_t arg2, uintptr_t arg3, uintptr_t result, uint32_t backtrace_to_skip)
{
if (oom_pre_malloc_logger) {
oom_pre_malloc_logger(type, arg1, arg2, arg3, result, backtrace_to_skip);
}
//QQLeak
malloc_stack_logger(type,arg1,arg2,arg3,result,backtrace_to_skip);
//OOMDetector
oom_malloc_logger(type,arg1,arg2,arg3,result,4);
}