dan*_*ass 10 macos cocoa dyld dlopen
经过一些仔细的调试,我发现我的应用程序中存在一个错误,该错误植根于系统框架中,加载了一个有问题的Apple软件包:
/System/Library/CoreServices/MLTEFile.bundle
Run Code Online (Sandbox Code Playgroud)
我相信我没有从这个捆绑的服务中受益,并且怀疑很多应用程序都是.事实上,我通过研究Xcode本身学到了捆绑不能加载到Xcode的内存空间,因为捆绑包不兼容垃圾收集.
理想情况下,我想阻止此捆绑包加载到我的应用程序中.这样做的一种方法是在我自己的应用程序中要求GC,但我不打算这样做.任何人都可以想办法绕过系统框架调用dlopen()这个库的尝试吗?
感谢Twitter上的一些有用的回复,我能够在这里提供dyld的"插入"功能作为潜在的解决方案.搜索"在从属库中插入函数":
这里的简短示例:
http://toves.freeshell.org/interpose/
还有一个用于在此处声明设置的简化宏:
http://www.opensource.apple.com/source/dyld/dyld-97.1/include/mach-o/dyld-interposing.h
我对这里展示的各种方法感到有些困惑.似乎有一种机制可以在DYLD名称表中公布_interpose欲,以及一个完全(?)不同的机制,它依赖于使用dlsym(RTLD_NEXT,...)链接到原始.在苹果的下载示例(从第一个文档的链接),他们使用的dlsym的技术,但它不是我清楚,如果这隐含地发生的介入.
| 归档时间: |
|
| 查看次数: |
1816 次 |
| 最近记录: |