通过dlsym覆盖FSGetCatalogInfo

时间:2011-12-04 01:12:46

标签: c macos dll-injection dyld dlsym

我正在尝试使用DYLD_INSERT_LIBRARIES覆盖OS X Lion 10.7下的FSGetCatalogInfo函数,并且一切正常,直到我实际调用原始FSGetCatalogInfo函数,此时我得到“总线错误:10”

我的代码段是:

OSErr (*original_FSGetCatalogInfo) (const FSRef *,FSCatalogInfoBitmap,FSCatalogInfo *,HFSUniStr255 *,FSSpecPtr,FSRef *) = NULL;

OSErr FSGetCatalogInfo (const FSRef *ref,FSCatalogInfoBitmap whichInfo,FSCatalogInfo *catalogInfo,HFSUniStr255 *outName,FSSpecPtr fsSpec,FSRef *parentRef)
{
    if(!original_FSGetCatalogInfo) {
        printf("== FSGetCatalogInfo - creating shim link ==\n");
        original_FSGetCatalogInfo = dlsym(RTLD_NEXT, "FSGetCatalogInfo");
        printf("== FSGetCatalogInfo - created shim link ==\n");
    }

    printf("== FSGetCatalogInfo - calling original function ==\n");
    OSErr oserr = original_FSGetCatalogInfo(ref,whichInfo,catalogInfo,outName,fsSpec,parentRef);
    printf("== FSGetCatalogInfo - called original function ==\n");
    return oserr;
}

我在想我必须要么定义或调用原来的FSGetCatalogInfo错误,但我无法确切地知道我搞砸了什么 - 想法?

0 个答案:

没有答案