dyld方式遍历模块源码讲解

mac ios上遍历模块的有几种方式(其实不叫遍历模块,应该叫做遍历进程内所有的macho可执行文件,看完就知道为什么了)。
这里只看dyld方式遍历的,dyld大家都知道这个是水果支持动态链接启动macho文件用的,也就当你要依赖其它库时dyld会给也把这些坑填了,遍历模块代码是:https://blog.51cto.com/haidragon/2164203
dyld方式遍历模块源码讲解
用到的函数有:

int32_t nModNums= _dyld_image_count();  //获取所有image
pModSlide  = _dyld_get_image_vmaddr_slide(i);//获取单个image随机基址
pszModName = _dyld_get_image_name(i);//名称
pModHeader = _dyld_get_image_header(i); //头

我们直接看dyld源码,因为这些函数都是上面封装的函数dyld是没有的,但是我们可以看下面的真正实现,如图我们可以看到有一个getImageCount();函数。
dyld方式遍历模块源码讲解
看源码,如图所示。
dyld方式遍历模块源码讲解
直接就是返回sAllImages,说明是一个全局变量。
dyld方式遍历模块源码讲解
果然是一个向量。双击它下面就会有对应的引用。

dyld方式遍历模块源码讲解
我们看第一个addImage函数。
dyld方式遍历模块源码讲解
然后继续看addImage谁引用了它,如图所示。
dyld方式遍历模块源码讲解
有4个函数。我们直接看第二个,如图所示。
dyld方式遍历模块源码讲解
我们看到了这个函数要一个随机基址值。说明这个调用这个函数的时候已经安排了地址。可以看这个基址怎么来的,我在这里主要是要说的是通过分析,镜像是保存在一个全局变量中,我开始认为会是保存在像windows上的那种进程,线程环境块。可能是没有windows分的那么细,可能也是我并没有理解到水果在用户层怎么管理的,我只需要看到这里其它可以自己慢慢往下看。

转载于:https://blog.51cto.com/haidragon/2406235

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值