dyld方式遍历模块源码讲解
2019-06-07 14:50
731 查看
mac ios上遍历模块的有几种方式(其实不叫遍历模块,应该叫做遍历进程内所有的macho可执行文件,看完就知道为什么了)。
这里只看dyld方式遍历的,dyld大家都知道这个是水果支持动态链接启动macho文件用的,也就当你要依赖其它库时dyld会给也把这些坑填了,遍历模块代码是:https://blog.51cto.com/haidragon/2164203
用到的函数有:
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();函数。
看源码,如图所示。
直接就是返回sAllImages,说明是一个全局变量。
果然是一个向量。双击它下面就会有对应的引用。
我们看第一个addImage函数。
然后继续看addImage谁引用了它,如图所示。
有4个函数。我们直接看第二个,如图所示。
我们看到了这个函数要一个随机基址值。说明这个调用这个函数的时候已经安排了地址。可以看这个基址怎么来的,我在这里主要是要说的是通过分析,镜像是保存在一个全局变量中,我开始认为会是保存在像windows上的那种进程,线程环境块。可能是没有windows分的那么细,可能也是我并没有理解到水果在用户层怎么管理的,我只需要看到这里其它可以自己慢慢往下看。
相关文章推荐
- 【java】源码详解三种map遍历方式
- 举例讲解C语言程序中对二叉树数据结构的各种遍历方式
- JDK源码学习(4)-HashMap的遍历方式,两种迭代器源码分析
- Python 实现抽象类的两种方式+邮件提醒+动态导入模块+反射(参考Django中间件源码)
- 使用Jquery+EasyUI 进行框架项目开发案例讲解之五--模块(菜单)管理源码分享
- 详细讲解二叉树三种遍历方式的递归与非递归实现
- 使用Jquery+EasyUI 进行框架项目开发案例讲解之五--模块(菜单)管理源码分享 推荐
- 树的后序遍历方式源码
- 使用Jquery+EasyUI 进行框架项目开发案例讲解之五--模块(菜单)管理源码分享
- list的4种遍历方式(实例讲解)
- 深入PHP购物车模块功能分析(函数讲解,附源码)
- PHP二维关联数组的遍历方式(实例讲解)
- 详细讲解二叉树三种遍历方式的递归与非递归实现
- 异常解析家族应用点源码讲解:SpringMVC全局异常捕获及SpringMVC文件上传报错的优雅解决方式以及@Exception拦截异常注意点
- 详细讲解二叉树三种遍历方式的递归与非递归实现
- 对集合知识的几种遍历方式和Iterator的源码分析初步认识
- 详细讲解二叉树三种遍历方式的递归与非递归实现
- Centos6.9实现基于源码编译安装LAMP(FPM模块方式)的wordpress应用
- Ansible 源码解析: shell模块的实现方式
- 详细讲解二叉树三种遍历方式的递归与非递归实现