调用函数指针会导致段错误

Call to a function pointer results in a segfault?

本文关键字:错误 段错误 函数 指针 调用      更新时间:2023-10-16

由于某些原因,当我尝试调用CFShow_New时,以下代码导致SIGSEGV:

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

你定义了指针指向指针的函数,这样做:

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

和电话:

CSShow_New(str);