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",这会导致它吗?如果是这样,我该如何解决?

4

1 回答 1

3

您定义了指向函数指针的指针:

CSShow_XX CFShow_New = (CFShow_XX)cfshow_sym.nl.n_value;

并致电:

CSShow_New(str);
于 2011-11-26T18:59:52.253 回答