OOMDetector icon indicating copy to clipboard operation
OOMDetector copied to clipboard

怎么调用的common_stack_logger

Open aimsgmiss opened this issue 6 years ago • 6 comments

common_stack_logger 这个函数怎么调用的,谢谢啦

aimsgmiss avatar Feb 06 '18 08:02 aimsgmiss

malloc_zone_malloc

hook了malloc_zone_malloc 但是没发现在那里hook

aimsgmiss avatar Feb 06 '18 08:02 aimsgmiss

利用了libmalloc 中的某个函数指针

JunyiXie avatar Feb 22 '18 12:02 JunyiXie

去苹果开源库看看libmalloc的代码

biosli avatar Feb 27 '18 07:02 biosli

利用了libmalloc 中的某个函数指针

image 源码中判断了malloc_logger 是否存在,如果存在,则调用对应的方法,但怎么知道iOS系统是否使用了这个函数的呢?

HePingLaoSan avatar Aug 26 '19 09:08 HePingLaoSan

大概了解了,malloc_logger 是一个钩子函数 image hook到了common_stack_logger这个函数上实现了自定义的调用,但是这么做的代价就是disable了系统对于malloc_logger的实现(比如源码中的这个功能turn_on_stack_logging

HePingLaoSan avatar Aug 26 '19 10:08 HePingLaoSan

注册此类全局函数指针应该保存之前的注册,并在自己的实现中回调回去,否则如果其他组件也想检测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);
}

MomoYincongxiao avatar Nov 22 '19 04:11 MomoYincongxiao