iOS 动态库注入原理

原理

在程序的运行文件mach-O中LoadCommands指令中,存放这需要加载的库,到时候由dyld读取,并且在运行时加载。注意到LoadCommands整个段尾部还留有一些空白。因此在这么多库的后面添加自定义的库即可。

PS:通常都是在后面注入,因为在这些库前面注入的话都要修改后面库的偏移量,比较麻烦,monkeyDev那套貌似可以插入在前面一点点的

同一个项目里的三方库会短暂打包到App包里面(Frameworks目录下,经测试如果最后还是没有用到,可能会被删除)

yololib注入

yololib是一个注入工具,输入命令比较简单,这里简单讲下:

Framwork注入

  • 通过Xcode新建Framwork,将库安装进入APP包

  • 通过yololib注入Framwork库路径。命令:yololib 需要注入的Mach-O文件路径 库中的mach-O文件路径

这个yololib放到环境变量中(usr/local/bin目录下),便可以每个地方都敲出来,这样,在重签名脚本后面加上yololib注入命令便可自动注入

Dylib注入

这也是monkeyDev使用的方式

  • 通过Xcode新建Dylib库(注意:Dylib属于MacOS所以需要修改属性,build setting 里面改baseSDK,signing也需改成iphone的)

  • 添加Target依赖,让Xcode将自定义Dylib文件打包进入APP包。(主工程里面build phase->新建copy file,把dylib复制进去,加到framework里面)命令:yololib 需要注入的Mach-O文件路径 dylib库

PS:如果出现image not found错误,记得将dylib文件 copy到项目中去

你可能感兴趣的:(iOS 动态库注入原理)