dyld(3) 手册页中记录的函数(似乎不再在线)似乎提供了类似的功能。
这是内容:
姓名
Run Code Online (Sandbox Code Playgroud)_dyld_image_count, _dyld_get_image_header, _dyld_get_image_vmaddr_slide, _dyld_get_image_name, _dyld_register_func_for_add_image, _dyld_register_func_for_remove_image, NSVersionOfRunTimeLibrary, NSVersionOfLinkTimeLibrary _NSGetExecutablePath概要
Run Code Online (Sandbox Code Playgroud)#include <mach-o/dyld.h> uint32_t _dyld_image_count(void); const struct mach_header* _dyld_get_image_header(uint32_t image_index); intptr_t _dyld_get_image_vmaddr_slide(uint32_t image_index); const char* _dyld_get_image_name(uint32_t image_index); void _dyld_register_func_for_add_image(void (*func)(const struct mach_header* mh, intptr_t vmaddr_slide)); void _dyld_register_func_for_remove_image(void (*func)(const struct mach_header* mh, intptr_t vmaddr_slide)); int32_t NSVersionOfRunTimeLibrary(const char* libraryName); int32_t NSVersionOfLinkTimeLibrary(const char* libraryName); int _NSGetExecutablePath(char* buf, uint32_t* bufsize);描述
dlopen()除了和提供的之外,这些例程还提供了对 dyld 的额外内省dladdr()
_dyld_image_count()返回 dyld 映射的当前图像数量。请注意,使用此计数来迭代所有图像不是线程安全的,因为另一个线程可能在迭代期间添加或删除图像。
_dyld_get_image_header()返回指向由 image_index 索引的图像的 mach 头的指针。如果image_index超出范围,则返回 NULL。
_dyld_get_image_vmaddr_slide()返回 索引的图像的虚拟内存地址滑动量image_index。如果image_index超出范围则返回零。
_dyld_get_image_name()返回由 索引的图像的名称image_index。C 字符串继续归 dyld 所有,不应删除。如果image_index超出范围则返回 NULL。
_dyld_register_func_for_add_image()注册在将新映像(捆绑包或动态共享库)添加到程序时要调用的指定函数。首次注册此函数时,将为当前属于进程一部分的每个图像调用一次。
_dyld_register_func_for_remove_image()注册从进程中删除映像(捆绑包或动态共享库)时要调用的指定函数。
NSVersionOfRunTimeLibrary()返回由libraryName指定的当前加载的dylib的current_version号。对于 /path/libbar.3.dylib,libraryName 参数将为“bar”,对于 /path/Foo.framework/Versions/A/Foo,则为“Foo”。如果没有加载此类库,则该函数返回 -1。
NSVersionOfLinkTimeLibrary()返回主可执行文件在构建时链接的 current_version 号。对于 /path/libbar.3.dylib,libraryName 参数将为“bar”,对于 /path/Foo.framework/Versions/A/Foo,则为“Foo”。如果主可执行文件未链接到指定的库,则此函数返回 -1。
_NSGetExecutablePath()将主可执行文件的路径复制到缓冲区中buf。该bufsize参数最初应该是缓冲区的大小。如果路径复制成功,该函数返回 0,*bufsize保持不变。如果缓冲区不够大,则返回 -1,并将 *bufsize设置为所需的大小。请注意,_NSGetExecutablePath()将返回可执行文件的“路径”,而不是可执行文件的“真实路径”。也就是说,该路径可能是符号链接而不是真实的文件。对于深层目录,所需的总缓冲区大小可能超过MAXPATHLEN。
| 归档时间: |
|
| 查看次数: |
2142 次 |
| 最近记录: |