MSHookFunction hook C 私有函数异常

环境: monkeydev

情况:想hook app的语言和地区,一步步动态调试到C函数,这应该是比较底层的函数了。

代码:

#include<substrate.h>
#import <dlfcn.h>
SInt32 (*orig_CFBundleGetLanguageCodeForLocalization)(CFStringRef localizationName);
SInt32 new_CFBundleGetLanguageCodeForLocalization(CFStringRef localizationName)
{
    SInt32 ret;
    ret = orig_CFBundleGetLanguageCodeForLocalization(localizationName);
    return ret;
}

%ctor{
    MSHookFunction( (SInt32 (*)(CFStringRef))MSFindSymbol(NULL,"_CFBundleGetLanguageCodeForLocalization"),new_CFBundleGetLanguageCodeForLocalization,&orig_CFBundleGetLanguageCodeForLocalization);

}

问题:运行直接异常,异常如下

* thread #1, queue = 'com.apple.main-thread', stop reason = signal SIGABRT
    frame #0: 0x00000001068eb4f0 dyld`__abort_with_payload + 8
    frame #1: 0x00000001068f230c dyld`abort_with_payload_wrapper_internal + 100
    frame #2: 0x00000001068f233c dyld`abort_with_payload + 12
    frame #3: 0x00000001068ef728 dyld`dyld::halt(char const*) + 380
    frame #4: 0x00000001068a45d0 dyld`dyld::fastBindLazySymbol(ImageLoader**, unsigned long) + 168
    frame #5: 0x00000001a4ba1efc libdyld.dylib`dyld_stub_binder + 60
    frame #6: 0x00000001071391c4 libsubstrate.dylib`___lldb_unnamed_symbol14$$libsubstrate.dylib + 76
    frame #7: 0x00000001071389d8 libsubstrate.dylib`___lldb_unnamed_symbol8$$libsubstrate.dylib + 116
    frame #8: 0x0000000107138220 libsubstrate.dylib`___lldb_unnamed_symbol1$$libsubstrate.dylib + 256
    frame #9: 0x0000000107138110 libsubstrate.dylib`MSFindSymbol + 56
  * frame #10: 0x000000010701e578 libtankDylib.dylib`_logosLocalCtor_65c747d9(argc=1, argv=0x000000016d2a7770, envp=0x000000016d2a7780) at tankDylib.xm:53:46

有同学知道这是什么原因吗? :see_no_evil: