有没有一种方法可以检测应用程序在运行时加载哪些动态库?我已经通过Apple的documentation查看了动态库,但似乎没有对此进行讨论。

最佳答案

要获取应用程序在运行时加载的所有库的列表:

// 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/

有一篇有趣的博客文章,关于在此处遍历mach标头信息:

http://ddeville.me/2014/04/dynamic-linking/

关于ios - 如何检测动态库负载,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34759368/

10-12 04:41