首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏云原生布道专栏

    【IOS开发高级系列】dyld专题

    1 dyld 1.1 dyld简介         在iOS系统中,几乎所有的程序都会用到动态库,而动态库在加载的时候都需要用dyld(位于/usr/lib/dyld)程序进行链接。 dyld缓存在系统中位于“/System/Library/Caches/com.apple.dyld/”目录下,文件名是以“dyld_shared_cache_”开头,再加上这个dyld缓存文件所支持的指令集 使用dyld_decache可以整体提取dyld缓存文件中的所有库原始二进制文件: dyld_decache [-o folder] [-f name [-f name] ...]path/to/dyld_shared_cache_armvX 系统加载程序可执行文件后,通过分析文件来获得dyld所在路径来加载dyld,然后就将后面的事情甩给dyld了。 ]         jmp跳转的地址是__DATA段中__nl_symbol_ptr节区,指向的是符号dyld_stub_binder(),该函数由dyld导出,实现位于dyld源码的“dyld_stub_binder.s

    1.6K60编辑于 2023-10-16
  • 来自专栏iOS逆向与安全

    iOS小技能:分析dyld的信息

    dyld: loaded: /usr/lib/system/libdyld.dylib dyld: loaded: /usr/lib/system/libkeymgr.dylib dyld dyld: loaded: /usr/lib/system/libunwind.dylib dyld: loaded: /usr/lib/system/libxpc.dylib dyld: bool DYLD_BIND_AT_LAUNCH; bool DYLD_PRINT_STATISTICS; bool DYLD_PRINT_STATISTICS_DETAILS ; bool DYLD_PRINT_OPTS; bool DYLD_PRINT_ENV; bool DYLD_DISABLE_DOFS; bool DYLD_PRINT_CS_NOTIFICATIONS //如果设置了DYLD_PRINT_ENV环境变量打印环境变量 在xocode 中设置环境变量:DYLD_PRINT_STATISTICS、DYLD_PRINT_STATISTICS_DETAILS

    80820编辑于 2022-08-22
  • 来自专栏码生

    dyld: Library not loaded: usrlocaloptjpegliblibjpeg.8.dylib

    wget -c http://www.ijg.org/files/jpegsrc.v8d.tar.gz tar xzf jpegsrc.v8d.tar.gz cd jpeg-8d ./configure make cp ./.libs/libjpeg.8.dylib /usr/local/opt/jpeg/lib

    77930发布于 2018-11-21
  • 来自专栏iOS开发干货分享

    iOS逆向(5)-不知MachO怎敢说自己懂DYLD

    dyld确实是用来加载我们app的,在下面一节将会对dyld的源码进行分析,讲述dyld是如何对MachO进行加载的。 点击这里下载dyld源码 3、在dyldbootstrap中查看start函数 // // This is code to bootstrap dyld. 最后找到函数_dyld_objc_notify_register,就在全局都找不到一个调用的地方了,其实这个函数本身就不是给dyld调用的,而是提供给外部调用的。 最终dyld的main函数中的主要流程就已经走完了,当然这7个步骤是一条主线,期间还会有很多其他的步骤,过程非常繁琐,这就不一一举例了。大家可以通过阅读dyld的源码尽收眼底。 四、总结 本文讲述了MachO的概述,文件结构,在从其中Load Commons中的LC_LOAD_DYLINKER引出dyld,接下根据dyld源码分析了APP的启动流程。

    2.1K41发布于 2019-06-14
  • 来自专栏移动端周边技术扩展

    2018-01-12dyld: Library not loaded: 各种情况

    dyld: Library not loaded: 第一种情况:带有 Swift 项目 dyld: Library not loaded: @rpath/libswiftCore.dylib Referenced ~/Library/Developer/Xcode/DerivedData 3.rm -rf ~/Library/Caches/com.apple.dt.Xcode 第二种情况:动态库未链接到项目内 dyld found 解决办法: 在 TARGETS —> General —> Embedded Binaries 下,点击 + 按钮,选择 Charts.framework就可以解决问题 第三种情况:证书有问题 dyld

    2.6K20发布于 2018-06-14
  • 来自专栏freesan44

    dyld: Library not loaded: Reason: image not found 问题解决

    前言 添加第三方框架,然后启动app的时候会,提示dyld: Library not loaded: Reason: image not found 网上大部分的做法都是把Build Phases 里对应

    3.6K30发布于 2019-08-29
  • 来自专栏iOS开发~

    iOS_版本低于iOS13 Crash:dyld: Library not loaded CryptoKit

    公司要了高通的Gaia库实现OTA,版本迭代他们用了CryptoKit,而我们的app还是支持iOS9的,所以得做一下兼容:

    40220编辑于 2022-07-20
  • 来自专栏iOS小生活

    应用程序的加载——dyld动态链接器的工作流程

    答案就是通过系统的动态链接器dyld: ? 什么是dyld dyld是英文 the dynamic link editor 的简写,翻译过来就是动态链接器,是苹果操作系统的一个重要组成部分。 /dyld。 现在我们已经找到dyld的入口函数了,接下来就打开下载的dyld源码,然后全局搜索【_dyld_start】,根据搜索结果我们发现,dyld源码中按照不同系统架构(比如 i386、x86_64、arm64 ::kdebug_trace_dyld_enabled(DBG_DYLD_TIMING_LAUNCH_EXECUTABLE)) { dyld3::kdebug_trace_dyld_duration_end ::kdebug_trace_dyld_enabled(DBG_DYLD_TIMING_LAUNCH_EXECUTABLE)) { dyld3::kdebug_trace_dyld_duration_end

    2.5K10发布于 2021-03-10
  • 来自专栏陈满iOS

    iOS报错记录:dyld: could not load inserted library usrliblibgmalloc.dylib because image not found

    报错日志: 日志区打印此警告 dyld: could not load inserted library '/usr/lib/libgmalloc.dylib' because image not found

    1.7K10发布于 2018-10-12
  • 来自专栏编程语言

    iOS 13.3.1 真机 CocoaPods 三方库奔溃问题 dyld: Library not loaded: @rpath

    问题表现形式: 1.dyld: Library not loaded: @rpath 2.当你解决掉这个引用问题,会发现在真机上面会奔溃在你引用三方的地方 问题出现系统版本:13.3.1 真机 解决方案

    1.8K20发布于 2020-02-24
  • 来自专栏HelloCode开发者学习平台

    iOS底层分析之应用程序加载流程

    接下来我们通过源码分析看一下,main函数之前的流程走向. dyld分析 (dyld又叫动态链接器) dyld流程: dyld_start dyldbootstrap::start dyld: 里的_dyld_start,接下来我们下载dyld源码打开源码,搜索_dyld_start,我们会发现有好几个__dyld_start:定义,由于当前的运行设备是iPhone11,所以我们只需要看#if 当_objc_init一顿初始化操作之后,调用_dyld_objc_notify_register告诉dyld我已经初始化完毕了。 我们知道,最先执行的是_dyld_start,dyld源码搜素_dyld_start: 发现_dyld_start最后会调起main()函数; 回到工程,打开DeBug调试: 我们发现_dyld_start (_dyld_objc_notify_mapped mapped, _dyld_objc_notify_init init, _dyld_objc_notify_unmapped unmapped) {

    1.1K10编辑于 2022-01-14
  • 来自专栏DevTips

    iOS逆向工程工具集

    提取iOS系统内的二进制文件 从iOS 3.1开始,包括frameworks在内的许多库文件被放入了位于“/System/Library/Caches/com.apple.dyld/dyld_shared_cache_armx ” (dyld_shared_cache_armv7,dyld_shared_cache_armv7s,dyld_shared_cache_arm64),可使用dyld_decache将其中的二进制文件提取出来 1, 用iFunBox从手机中拷贝dyld_deache System/Library/Caches/com.apple.dyld/ dyld_shared_cache_armx 2,下载提取工具dyld_decache https://github.com/downloads/kennytm/Miscellaneous/dyld_decache[v0.1c].bz2下载dyld_decache 可将dyld_decache [v0.1c] 重命名为dyld_decache1 3,赋予权限 chmod +x dyld_decache(具体路径) 4,执行提取命令 /Users/ligh/dyld_decache -o /Users

    1.4K10编辑于 2022-01-20
  • 来自专栏小黑娃Henry

    OC底层探索16 -应用程序加载OC底层探索16 -应用程序加载

    动态库 1.4 dyld动态链接器 dyld(the dynamic link editor):【动态链接器】是苹果操作系统一个重要部分,在 iOS / macOS 系统中,仅有很少的进程只需内核就可以完成加载 启动入口 根据堆栈信息得知:程序加载的第一步就是dyld的_dydl_start函数,通过下载dyld-源码来进一步探索。 3.1 _dyld_start函数 ? _dyld_start 会有不同的硬件架构对于的处理,最终指向这个dyldbootstrap::start函数 3.2 start函数 源文件-预编译-编译-汇编-链接-可执行文件 - dyld加载 start 3.3 dyld::main函数 这就是dyld最重要的方法。 在dyld中出现了Objc...

    67120发布于 2021-08-09
  • 来自专栏iOS开发攻城狮的集散地

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

    简单总结 系统先读取App的可执行文件(Mach-O文件),从里面获得dyld的路径,然后加载dyld,dyld去初始化运行环境。 /usr/lib/dyld路径下。 系统加载程序可执行文件后,通过分析文件来获得dyld所在路径来加载dyld,然后就将后面的事情交给dyld. dyld dyld(the dynamic link editor), Apple 的动态链接器,系统kernel做好启动程序的初始准备后,交给dyld负责,dyld作用顺序的概括: 1. 我们可以看下_main函数: dyld::_main函数代码.png 这里的_main函数是dyld的函数,并非我们程序里的main函数。

    1.2K10编辑于 2022-05-13
  • 来自专栏ShaoYL

    iOS 获取真机上系统动态库文件

    iOS 获取真机上所有系统库文件 系统动态库文件存放真机地址(/System/Library/Caches/com.apple.dyld/dyld_shared_cache_arm64) 在Mac\iOS 中,是使用了/usr/lib/dyld程序来加载动态库(动态加载器)dyld源码 ---- 从动态库共享缓存抽取动态库 使用dyld源码抽取 下载最新的 dyld 源码,目前最新版本为 dyld-519.2.2 + –o dsc_extractor dsc_extractor .cpp dsc_iterator.cpp 从真机中获取动态库文件(/System/Library/Caches/com.apple.dyld /dyld_shared_cache_arm64) 使用编译生成的 dsc_decache:抽取动态库 .

    1.7K50发布于 2018-06-21
  • 来自专栏ShaoYL

    iOS 获取真机上系统动态库文件

    iOS 获取真机上所有系统库文件 系统动态库文件存放真机地址(/System/Library/Caches/com.apple.dyld/dyld_shared_cache_arm64) 在Mac\iOS 中,是使用了/usr/lib/dyld程序来加载动态库(动态加载器)dyld源码 ---- 从动态库共享缓存抽取动态库 使用dyld源码抽取 下载最新的 dyld 源码,目前最新版本为 dyld-519.2.2 + –o dsc_extractor dsc_extractor .cpp dsc_iterator.cpp 从真机中获取动态库文件(/System/Library/Caches/com.apple.dyld /dyld_shared_cache_arm64) 使用编译生成的 dsc_decache:抽取动态库 .

    1.3K130发布于 2018-05-11
  • 来自专栏iOS开发干货分享

    iOS应用代码注入防护

    利用yololib修改MachO文件,添加库路径.在应用启动时,dyld会加载并执行. 源码中可以分析到. dyld源码分析 首先这里分析的DYLD源码版本是519.2.2版本. if ( sEnv.DYLD_INSERT_LIBRARIES ! 但是新版的dyld源码中去掉了__RESTRICT检测.从iOS10开始,这种防护手段已失效 DYLD_INSERT_LIBRARIES 检测 那么既然dyld加载过程不再检测__RESTRICT段了我们就手动的检测 DYLD_INSERT_LIBRARIES环境变量.通过函数可查看当前进程环境变量的值.

    2.4K50发布于 2019-01-11
  • 来自专栏iOS开发干货分享

    iOS应用代码注入防护

    利用yololib修改MachO文件,添加库路径.在应用启动时,dyld会加载并执行. 源码中可以分析到. dyld源码分析 首先这里分析的DYLD源码版本是519.2.2版本. 我们可以通过检索DYLD_INSERT_LIBRARIES定位到_main函数加载插入动态库的代码如下. 但是新版的dyld源码中去掉了__RESTRICT检测.从iOS10开始,这种防护手段已失效 DYLD_INSERT_LIBRARIES 检测 那么既然dyld加载过程不再检测__RESTRICT段了我们就手动的检测 DYLD_INSERT_LIBRARIES环境变量.通过函数可查看当前进程环境变量的值.

    1.1K20编辑于 2023-03-19
  • 来自专栏HelloCode开发者学习平台

    iOS的应用代码注入防护

    在应用启动时,使dyld会加载并执行。 早期防护方式 在工程的构建设置中找到其他链接器Flages并添加字段 此操作的作用是在可执行文件中添加一个节。 其原理在dyld的源码中可以分析到。 dyld的源码分析 首先这里分析的dyld的源码版本的英文519.2.2版本。 我们可以通过检索DYLD_INSERT_LIBRARIES定位到_main函数加载插入动态库的代码如下。 但是早在这个环境变量判断之前,dyld的已经做了一个判断 如果判断出进程是受限制的! 但是新版的dyld源码中去掉了__RESTRICT检测。 从iOS10开始,这种防护手段已失效 DYLD_INSERT_LIBRARIES检测 那么既然dyld的加载过程不再检测__restrict了段就我们的手动检测DYLD_INSERT_LIBRARIES

    1.3K20编辑于 2023-03-23
  • 来自专栏HelloCode开发者学习平台

    对于load方法的理解

    方法是如何被调用的 我们可以很清楚的看到,在+load方法之前,被调用的方法有: 1 call_class_loads() 2 call_load_methods 3 load_images 4 dyld ::notifySingle(dyld_image_states, ImageLoader const*) 11 _dyld_start (滑动显示更多) dyld 是 the dynamic link 把dyld加载到内存。dyld也是一个可执行的程序。 dyld进行动态链接。 dyld的具体工作内容: dyld会找到可执行文件的依赖动态库。接着dyld会将所依赖的动态库加载到内存中。 这是一个递归的过程,依赖的动态库可能还会依赖别的动态库,所以dyld会递归每个动态库,直至所有的依赖库都被加载完毕。 Rebase和Binding。

    1.3K20编辑于 2022-01-14
领券