有没有办法检测应用在运行时加载的动态库?我已经浏览了Apple的documentation动态库,但它似乎没有讨论过这个问题。
答案 0 :(得分:1)
一个。
您可以按照here所述记录加载事件。
本文确定了您可以设置的环境变量以及它们激活的动态加载程序日志记录的类型。
您可以使用产品 |设置env Scheme | 编辑方案... 菜单,然后在工作表运行 |中环境。
因此,您无法在应用中“访问”它。应用程序(更准确地说:运行时环境)只是在您的应用程序中没有任何代码的情况下记录事件。
乙
动态库本身可以通过每个类的+load
方法检测其加载。每个类别。
我不认为当通话导致动态加载时,应用程序本身会收到通知或此类通知。
答案 1 :(得分:1)
获取应用程序在运行时加载的所有库的列表:
// import the dynamic linker API
#import <mach-o/dyld.h>
// After your application finishes launching, maybe in
// -application:didFinishLaunchingWithOptions:
int imageCount = _dyld_image_count();
for (int i=0; i < imageCount; i++) {
NSLog(@"%d - %s", i, _dyld_get_image_name(i));
}
如果您想在每次加载库时调用函数,可以使用_dyld_register_func_for_add_image()
或_dyld_register_func_for_link_module()
重要提示我只在模拟器中检查了这一点。我相信它应该在设备上工作,但我现在还有其他需要处理的事情。
Apple文档从这里开始:https://developer.apple.com/library/prerelease/mac/documentation/DeveloperTools/Reference/MachOReference/
有一篇有趣的博客文章,关于在这里走马赫标题信息: