0
出于某种原因,下面的代码会导致SIGSEGV
当我尝试打电话CFShow_New
:调用函数指针会导致段错误?
的类型定义:
typedef void* (*CFShow_XX)(CFTypeRef lol);
的实际代码:
ImageLoaderMachO* loader =
dyld::getDyldImage("/XXX/CoreFoundation");
Symbol cfshow_sym = loader->findSymbol("_CFShow");
CFShow_XX* CFShow_New = (CFShow_XX*)cfshow_sym.nl.n_value;
assert(cfshow_sym.nl.n_value == (uint32_t)CFShow);
CFStringRef str = CFSTR("Test123");
CFShow(str); /* Works */
(*CFShow_New)(str); /* SIGSEGV's */
可能是什么问题? CFShow
是一个extern "C"
,可能导致它?如果是这样,我该如何解决?
如果你检查,而不是假设他们总是返回= NULL的返回值,这将有助于。 –
断言确认加载的符号是正确的。 –