求教:关于环境变量dyld_insert_libraries问题

最近在看关于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。不是吗?

结贴吧

:joy: 我还没搞懂 你们说的是啥?

继续请教: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);

这是要表达什么意思?:hushed:

看得我要吐血,大黑阔先去学学DYLD_INSERT_LIBRARIES怎么用吧

我的问题只是用来纠正我理解上的不足或错误

不能直接 帮助我解答问题吗?

代码都帮你找到了, 你就不能自己看看怎么赋值的? 赋的是什么值?
你到底有没有看得懂这些代码啊

你找到这些代码,我之前就找到过,因为看不懂里面到底是干吗的,我又没办法调试,所以才会有一些让人吐血的问题