由于某种原因,当我尝试拨打SIGSEGV
时,以下代码会导致CFShow_New
:
typedef:
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"
,可能导致它吗?如果是这样,我该如何解决?
答案 0 :(得分:3)
您定义了指向函数指针的指针:
CSShow_XX CFShow_New = (CFShow_XX)cfshow_sym.nl.n_value;
并致电:
CSShow_New(str);