首页
AI Coding
NEW
沸点
课程
直播
活动
AI刷题
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
会员
登录
注册
确定删除此收藏集吗
删除后此收藏集将被移除
取消
确定删除
确定删除此文章吗
删除后此文章将被从当前收藏集中移除
取消
确定删除
编辑收藏集
名称:
描述:
0
/100
公开
当其他人关注此收藏集后不可再更改为隐私
隐私
仅自己可见此收藏集
取消
确定
汇编教程
订阅
带投大哥
更多收藏集
微信扫码分享
微信
新浪微博
QQ
8篇文章 · 0订阅
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 动态调试快速分析系统函数的实现
在前三篇文章中,主要介绍了汇编中的常见指令和寻址方法,本文将结合这些知识介绍一种基于汇编代码和动态调试快速分析函数逻辑的方法。 在进行逆向工程,或是涉及到底层的正向开发(如性能优化、安全防护)时,常常会使用一些系统级的函数,有些时候从细节上了解这些函数的逻辑是十分必要的,例如 …
iOS汇编入门教程(三)汇编中的 Section 与数据存取
在前两篇文章中,我们介绍了反汇编的方法,调用栈的基本概念,以及如何通过 Xcode 去调试汇编代码,在这篇文章中,我们将介绍如何在汇编中通过 Section 来实现数据存取。 在汇编代码中各个部分的头部,我们常常能看到 .section 这样的声明,例如下面这段代码。 用 Ma…
iOS汇编入门教程(二)在Xcode工程中嵌入汇编代码
上一篇文章 iOS汇编入门教程 中介绍了汇编在iOS开发中的应用以及ARM汇编基础知识,本文将介绍在C或Objective-C构成的工程中如何嵌入汇编代码。 在调试ARM汇编时,Xcode的Build对象必须为真机,如果对象为模拟器则是x86汇编。 在函数中可以直接插入汇编代码…
iOS汇编入门教程(一)ARM64汇编基础
对于应用层开发人员而言,仅仅掌握Objective-C和系统框架即可较好的完成开发,但在涉及到应用加固、逆向分析等内容时仅有应用层开发技能就会显得非常的无力,因此掌握汇编对于突破iOS开发水平的瓶颈十分有效。 以反调试为例,我们知道,通过调用ptrace函数可以阻止调试器依附。…