По какой-то причине следующий код вызывает 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"
, это может быть причиной?И если да, то как мне это исправить?