首页
沸点
课程
数据标注
HOT
AI Coding
更多
直播
活动
APP
插件
直播
活动
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
登录
注册
确定删除此收藏集吗
删除后此收藏集将被移除
取消
确定删除
确定删除此文章吗
删除后此文章将被从当前收藏集中移除
取消
确定删除
编辑收藏集
名称:
描述:
0
/100
公开
当其他人关注此收藏集后不可再更改为隐私
隐私
仅自己可见此收藏集
取消
确定
iOS 汇编
订阅
已注销
更多收藏集
微信扫码分享
微信
新浪微博
QQ
12篇文章 · 0订阅
基于 unicorn + capstone 动态分析生成 objc_msgSend 交叉引用并导入 IDA
众所周知,在使用 IDA 进行 iOS 逆向工程时,仅仅依赖静态分析很难直接确定方法的 Callers,借助于 Decompiler 和 IDA 自己的分析能力仅能分析出非常有限的 objc_msgSend 交叉引用。目前一般的解法是借助于动态调试的 backtrace 或是 …
在 ARC 下对非 ObjC 类型的指针进行操作的编译器陷阱
在通常情况下,我们的代码在通过 LLVM 进行编译时,如果开启了 ARC 模式,在 backend 阶段会通过几个 ObjcARC Pass 插入基于引用计数的内存管理语句,这建立在编译器的类型推导和控制流分析等基础之上。 如果某些隐式操作逃过了 ObjCARC Pass 的“…
iOS汇编教程(八)静态链接中的 Relocation - 静态库链接时是如何保证对变量的相对寻址依然正确的?
在 iOS 应用开发过程中,我们常常通过静态库方式引用一些闭源三方 SDK,在编译链接时静态库的代码段、数据段和符号表等会被拼接到 App 的主二进制中,在拼接过程中静态库内代码段与数据段的相对位置会发生改变,导致原来代码中的相对寻址不能正确指向链接后产物中的数据,这就需要在链…
iOS汇编教程(七)ARM Exclusive - 互斥锁与读写一致性的底层实现原理
在多线程编程中,我们常常使用互斥锁来保证全局变量的线程安全,例如 pthread 中的 pthread_mutex,mach 中的 semaphore。他们通过 lock & unlock 或是 up & down 的方式来维护资源的状态,保证只有特定个数的线程能获得特定个数的…
iOS汇编教程(六)CPU 指令重排与内存屏障
具有 ARM 体系结构的机器拥有相对较弱的内存模型,这类 CPU 在读写指令重排序方面具有相当大的自由度,为了保证特定的执行顺序来获得确定结果,开发者需要在代码中插入合适的内存屏障,以防止指令重排序影响代码逻辑[1]。 本文会介绍 CPU 指令重排的意义和副作用,并通过一个实验…
iOS汇编教程(五)Objc Block 的内存布局和汇编表示
在 Objc 中,Block 是一个特殊的对象,它的实例并非是常规的对象结构,而是以 Block_layout 结构体的形式存在。在声明时,Block 的结构体会以值类型的形式直接存储在栈上,随后会被 copy 到堆上,成为一个特殊的对象,学习 Block 的底层原理一方面能够…
iOS汇编教程(四)基于 LLDB 动态调试快速分析系统函数的实现
在前三篇文章中,主要介绍了汇编中的常见指令和寻址方法,本文将结合这些知识介绍一种基于汇编代码和动态调试快速分析函数逻辑的方法。 在进行逆向工程,或是涉及到底层的正向开发(如性能优化、安全防护)时,常常会使用一些系统级的函数,有些时候从细节上了解这些函数的逻辑是十分必要的,例如 …
基于 Mach-O 符号重排减少缺页中断次数来提升 iOS App 启动速度的可行性分析
最近字节跳动技术团队放出了一篇文章:抖音研发实践:基于二进制文件重排的解决方案 APP启动速度提升超15%,提到通过重排 Mach-O中的二进制,减少启动流程中的缺页中断次数,为 App 节约了 200ms 左右的启动时间(根据抖音目前的启动速度估算),本着严谨的态度,本文将对…
iOS汇编入门教程(三)汇编中的 Section 与数据存取
在前两篇文章中,我们介绍了反汇编的方法,调用栈的基本概念,以及如何通过 Xcode 去调试汇编代码,在这篇文章中,我们将介绍如何在汇编中通过 Section 来实现数据存取。 在汇编代码中各个部分的头部,我们常常能看到 .section 这样的声明,例如下面这段代码。 用 Ma…
iOS汇编入门教程(二)在Xcode工程中嵌入汇编代码
上一篇文章 iOS汇编入门教程 中介绍了汇编在iOS开发中的应用以及ARM汇编基础知识,本文将介绍在C或Objective-C构成的工程中如何嵌入汇编代码。 在调试ARM汇编时,Xcode的Build对象必须为真机,如果对象为模拟器则是x86汇编。 在函数中可以直接插入汇编代码…