XCode 使用
-
XCode : Workspace && Project && Target && Build Settings && Scheme
- Workspace(工作区)
- Project(项目)
- Target(目标对象)
- Build Settings(构建设置)
- Scheme(构建方案)
- 其他
-
XCode 创建:静态库 && 动态库 && Framework
- 使用 XCode 创建 .a 格式的静态库
- 使用 XCode 创建 .framework 格式的静态库
- 使用 XCode 创建 .dylib 格式的动态库
- 使用 XCode 创建 .framework 格式的动态库
- 合并不同 CPU 指令集的库
- @executable_path、@loader_path、@rpath
8086 汇编
-
- 编程语言的发展
- 代码在终端设备上的转换过程
- 汇编语言的特点
- 汇编语言的用途
- 汇编语言的种类
- 几个必要的常识
- 注意
-
- 总线概述
- 地址总线
- 数据总线
- 控制总线
- 总线练习
- 内存
- 寄存器
- 字和字节
- 注意
-
- 8086的寻址方式
- 段地址和偏移地址有多种组合方式
- 内存分段管理
- 段寄存器
- 代码段CS和IP
- 指令的执行过程
- 指令和数据的本质
- jmp指令
- jmp指令练习
- 代码段
- 注意
-
- 数据段
- DS 和 [address]
- 字型数据的传递(2个字节)
- 大小端和高低位
- 练习
- mov 指令
- add 和 sub 指令
- 注意
-
- 编写一个完整的汇编语言
- 伪指令(assume,segment,ends,end)
- 退出汇编程序
- 中断
- DOS系统功能调用
- emu8086常用快捷键
- 注意
-
- 栈
- Push操作
- Pop操作
- 空栈
- 栈顶超界
- push 和 pop 汇编指令的格式
- 栈段
- 段总结(代码段,数据段,栈段)
- 练习
- 注意
-
- loop 指令
- db、dw、dup
- 数据段、栈段、代码段的定义
-
- call指令 和 ret指令
- 为什么用栈段来存放函数的参数
- 栈平衡
- 注意
-
- 函数的局部变量
- 死循环 与 无穷递归 的区别
- 函数内部再调用函数 & 现场保护
- 栈帧
- 站在汇编的视角看高级语言
- 函数调用参数的传递过程
- 全局变量
- 注意
-
- cmp指令、jne指令 与 flags寄存器
- 数据结构简介
- 用 C语言 写一个 Objective-C 的数组对象(顺序存储结构)
- HCGLinearList 代码(未封装)
- 注意
-
- C 语言的条件编译(Conditional Compile)
- Objective-C 中的 __bridge、__bridge_retained、__bridge_transfer
- 初识 LLDB
- HCGLinearList 封装
- LLDB 内存分析 与 逆向初步
- NSMutableArray 扩容分析
- HCGLinearList 扩容
-
- 用 C语言 写一个 Objective-C 的数组对象(链式存储结构)
- 线性表 HCGLinearList && HZPLinearList 函数执行效率分析
- XCode 使用汇编
密码学
-
- 模运算
- 离散对数难题
- 迪菲-赫尔曼秘钥交换
- 欧拉函数 与 欧拉定理
- RSA 非对称加密算法
-
- Base64编码
- SSL 与 OpenSSL
- macOS 下 RSA 证书生成过程
- Objective-C 使用 RSA
- 注意
-
- Hash
- HMAC
- 用户登录流程安全性分析
- Objective-C 中 NSString 的 Hash 分类
-
- 数字签名
- 数字证书
- HTTPS 与 数字证书
-
- 对称加密算法
- 对称加密算法常用的工作模式
- 对称加密算法常用的填充模式
- 对称加密算法演示
- XCode 符号断点
- 注意
iOS App 签名的原理 && App 重签名
-
- iOS App 签名的原理
- Provisioning Profile 详解
- 其他概念(WWDR、csr、cer、p12、AppID、Entitlements)
- 超级签名原理
- 注意
-
- .IPA 格式
- 其他概念(通用二进制文件、macOS 文件权限、Shell 脚本)
- 注意
-
- iOS App 重签名 - 准备工作
- iOS App 重签名 - 手动重签名
- iOS App 重签名 - 使用脚本重签名
- iOS App 重签名 - 使用 XCode 重签名
- 注意
MachO && dyld
-
- 虚拟内存 && 地址重定位
- 静态链接 && 动态链接
- 库(静态库 && 动态库)
- Linux:地址无关代码 && 懒绑定
- 注意
-
- Mach 微内核
- MachO 文件结构
- Header(头部)
- LoadCommands(加载命令)
-
- Data(数据)
- iOS 系统的懒绑定机制
- 如何获取到 Lazy Symbol Pointers 对应的函数名
- 通用二进制文件(多层 MachO 文件)
-
- XNU 加载 MachO 和 dyld 的流程
- 加载流程总结
- XNU 源码版本
- XNU 源码分析
- App 在虚拟内存中的分布
-
- 前导知识
- dyld 加载和链接动态库的流程
- ① 设置运行环境
- ② 加载系统共享缓存
- ③ 实例化主程序
- ④ 加载插入的动态库
- ⑤ 链接主程序
- ⑥ 链接插入的动态库
- ⑦ 执行弱符号绑定
- ⑧ 执行初始化方法
- ⑨ 查找主程序入口点并返回
- 总结
- 补充:验证 iOS 函数的调用顺序
- 补充:懒绑定函数的调用流程
- 思考