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"
,可能導致它?如果是這樣,我該如何解決?
如果你檢查,而不是假設他們總是返回= NULL的返回值,這將有助於。 –
斷言確認加載的符號是正確的。 –