最近在看关于dyld的东西,看到源码中有这样的代码
// load any inserted libraries
if ( sEnv.DYLD_INSERT_LIBRARIES != NULL ) {
for (const char* const* lib = sEnv.DYLD_INSERT_LIBRARIES; *lib != NULL; ++lib)
loadInsertedDylib(*lib);
}
就是加载所有的动态库,其中sEnv.DYLD_INSERT_LIBRARIES != NULL
引起了我的注意,让我想到之前在‘念茜’的检查是否为越狱机时,用到了DYLD_INSERT_LIBRARIES
,念茜blog如下:
void printEnv(void)
{
charchar *env = getenv("DYLD_INSERT_LIBRARIES");
NSLog(@"%s", env);
}
未越狱设备返回结果是 null ,越狱设备就各有各的精彩了,尤其是老一点的 iOS 版本越狱环境。
如果是越狱机,那么DYLD_INSERT_LIBRARIES
=NULL,那么就不会循环加载 dylibs ???是吗?
啥玩意,,,就是加载DYLD_INSERT_LIBRARIES里面指定的所有lib啊
越狱设备呢?其中的DYLD_INSERT_LIBRARIES 不是为NULL吗?
看第一段代码 。其中会循环加载所有的dylib。。。
啥叫循环加载所有dylib…你知道DYLD_INSERT_LIBRARIES里面是什么内容吗
还有loadInsertedDylib的实现你看了没有
for (const char* const* lib = sEnv.DYLD_INSERT_LIBRARIES; *lib != NULL; ++lib)
loadInsertedDylib(*lib);
你所有的动态库存在DYLD_INSERT_LIBRARIES里?
DYLD_INSERT_LIBRARIES里面存的不是path吗?在loadInsertedDyli()里得到dylibs。不是吗?
继续请教:DYLD_INSERT_LIBRARIES里面指定的lib 包括 主程序中使用的系统dylib吗(比如:libSystem.dylib)。
问这个问题的原因是:在dyld的源码中的 _main()中,主程序需要的dylib是在1 中加载的 还是 2中?
// 1,instantiate ImageLoader for main executable
sMainExecutable = instantiateFromLoadedImage(mainExecutableMH, mainExecutableSlide, sExecPath);
//...省略了好多代码
// 2, load any inserted libraries
if ( sEnv.DYLD_INSERT_LIBRARIES != NULL ) {
for (const char* const* lib = sEnv.DYLD_INSERT_LIBRARIES; *lib != NULL; ++lib)
loadInsertedDylib(*lib);
}
else if ( strcmp(key, "DYLD_INSERT_LIBRARIES") == 0 ) {
sEnv.DYLD_INSERT_LIBRARIES = parseColonList(value, NULL);
看得我要吐血,大黑阔先去学学DYLD_INSERT_LIBRARIES怎么用吧
代码都帮你找到了, 你就不能自己看看怎么赋值的? 赋的是什么值?
你到底有没有看得懂这些代码啊
你找到这些代码,我之前就找到过,因为看不懂里面到底是干吗的,我又没办法调试,所以才会有一些让人吐血的问题