首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

APP生成与运行(二)

整个过程为: 系统先读取App的可执行文件(Mach-O文件),从里面获得dyld的路径 加载dyld(the dynamic link editor,Apple 的动态链接器,系统 kernel 做好启动程序的初始准备后...,交给 dyld 负责),dyld去初始化运行环境,开启缓存策略, dyld加载程序相关动态,并对这些进行链接,调用每个依赖的初始化方法 runtime被初始化 ImageLoader:dyld把...Dyld 2.0的加载过程是: 解析 mach-o 文件,找到其依赖的,并且递归的找到所有依赖的,形成一张动态的依赖图。...静态 静态即静态链接(Windows 下的 .lib,Linux 和 Mac 下的 .a)。...如果环境缺少动态或者的版本不正确,就会导致程序无法运行(Linux 下喜闻乐见的 lib not found 错误)。

1.2K10

iOS有反检测能力的越狱工具shadow的分析和检测

那么,分析它就需要对进程启动时如何加载动态了解,这就涉及到iOS进程启动模型。...在Unix族里,进程启动模型的都大致如下: 加载执行文件:从绝对路径或相对路径或从环境变量指定搜索的路径搜索出来 根据执行文件依赖(导入表)来加载动态文件:从绝对路径或相对路径或从环境变量和系统配置指定的搜索路径搜索出来...在Unix族,和动态加载相关的环境变量和系统配置,就各有各的不同。....1.html 从上面可以看到iOS依次对下面这些环境变量包含的路径列表按照先后顺序遍历,一旦找到相应动态,立马停止该次遍历,查找下一个: DYLD_INSERT_LIBRARIES DYLD_VERSIONED_FRAMEWORK_PATH...___stack_chk_guard /usr/lib/libSystem.B.dylib 0000000000026870 __dyld_get_image_name /usr/lib/libSystem.B.dylib

1.8K10

macOS 开发中动态问题剖析

Dynamic frameworks are linked at runtime 动态是相对于静态,静态只在静态链接的过程中起作用,而动态是在运行时,由动态链接器加载进来。...install name的路径会被拷贝到可执行文件中,动态链接器会去查可执文件中所有intall name路径,找不到的话会去找/usr/lib//usr/local/lib/usr/lib/system.../lib/ 这样,随意地把demo文件夹拷到任何地方,动态链接都能正常地加载到a.dylib这个动态。.../静态的信息/usr/local/Cellar/graphviz/2.49.3/lib/libcgraph.6.dylib:/usr/local/opt/graphviz/lib/libcgraph.6.../libcgraph.6.dylib下加载这个动态,显示,这里使用绝对路径,到其它机器(没有安装graphviz或者是版本不是2.49.3)上,就会出现dyld: Library not loaded

2.9K123

iOS 优化 - 启动优化

main()函数之前操作系统所做的工作就是把可执行文件(Mach-O 格式)加载到内存空间,然后加载动态链接 dyld,再执行一系列动态链接操作和初始化操作的过程(加载、绑定、及初始化方法)。...加载流程 其实pre-main阶段的加载过程主要也是dyld加载流程,所以下文就主要梳理一下dyld加载流程。...dyld流程图 dyld(the dynamic link editor)是苹果的动态链接器,是一个专门用来加载动态链接,是开源的。...这一步是加载环境变量DYLD_INSERT_LIBRARIES中配置的动态dyld 负责。 fixup:rebase(偏移修正)/ binding(符号绑定) 链接主程序。...结合我的实际项目,项目为一个Swift-OC混编项目,主体为 Swift,CocoaPods 管理的方式为动态,本地调整为静态,具体方式为: 去掉use_frameworks!

3.7K20

iOS 程序 main函数之前发生什么

比如我们的main函数的加载地址,程序所需的dyld的文件路径,以及相关依赖的文件路径。 -Data:这里包含了具体的代码、数据等。.../usr/lib/dyld路径下。.../lib/libobjc.A.dylib /usr/lib/libSystem.dylib 出了多了CoreFoundation(被UIKit依赖)外,有两个默认添加的lib: libobjc即...这一步 dyld将我们可执行文件以及插入的lib加载进内存,生成对应的image. sMainExecutable对应着我们的可执行文件,里面包含了我们项目中所有新建的类。...总结 整个事件由dyld主导,完成运行环境的初始化后,配合ImageLoader将二进制文件按格式加载到内存 动态链接依赖,并由runtime负责加载成objc定义的结构,所有初始化工作结束后,dyld

78610

Xcode 常见 CLI 工具

然后我们通过nm /usr/bin/xcodebuild查看其name list U __NSGetProgname 0000000100008018 d __dyld_private...当然这套工具包有些命令不在/usr/bin路径下,我们就需要在命令前加上xcrun了,如swift-demangle,如果我们直接使用swift-demangle就会出现命令找不到的错误,使用xcrun...上述中间的大写字母就是后面对应符号的类型,其中全部的类型包括: A 该符号的值在今后的链接中将不再改变; B 该符号放在 BSS 段中,通常是那些初始化的全局变量; D 该符号放在普通的数据段中,...# 查看使用到哪些动态,一般是涉及到 /usr/lib/ /System/Library/Frameworks/ @rpath 这三个位置,如果没有自己的动态,就没有后面的 @rpath otool...XXX # 查看头部内容 otool -h XXX # 查看 load commands otool -l XXX # 查看该应用是否砸壳 # 看输出结果的cryptid参数,其中0:砸壳、1:砸壳

3.2K21
领券