调用函数指针会导致段错误吗?
由于某种原因,当我尝试调用 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"
,这会导致它吗?如果是这样,我该如何解决它?
For some reason the following code causes a SIGSEGV
when I try to call CFShow_New
:
The typedef:
typedef void* (*CFShow_XX)(CFTypeRef lol);
The actual code:
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 */
What could be the issue? CFShow
is an extern "C"
, could that cause it? And if so, how do I fix it?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您定义了指向函数指针的指针,执行以下操作:
并调用:
You defined the pointer to pointer to function do this:
and call: