首页
AI Coding
NEW
沸点
课程
直播
活动
AI刷题
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
会员
登录
注册
确定删除此收藏集吗
删除后此收藏集将被移除
取消
确定删除
确定删除此文章吗
删除后此文章将被从当前收藏集中移除
取消
确定删除
编辑收藏集
名称:
描述:
0
/100
公开
当其他人关注此收藏集后不可再更改为隐私
隐私
仅自己可见此收藏集
取消
确定
iOS
订阅
松鼠issleepinginbed
更多收藏集
微信扫码分享
微信
新浪微博
QQ
13篇文章 · 0订阅
iOS 逆向 - Hook / fishHook 原理与符号表
本篇文章较与依赖前一篇 Mach-O文件 的先导知识 , 建议先阅读后再探究 . HOOK,中文译为 “挂钩“ 或 “钩子” 。在 iOS 逆向中是指改变程序运行流程的一种技术。通过 hook 可以让别人的程序执行自己所写的代码。在逆向中经常使用这种技术。所以在学习过程中,我们…
iOS程序员的自我修养-MachO文件结构分析(二)
进程是特殊文件在内存中加载得到的结果。那这种文件的格式必须是系统内核可以理解的,系统内核才能正确解析。 系统内核将文件读入内存,然后寻找文件的头签名(魔数magic),根据magic就可以判断二进制文件的格式。 其实PE/ELF/Mach-O这三种可执行文件格式都是COFF(C…
RunLoop看这篇就够了
一般来讲,一个线程一次只能执行一个任务,执行完成后线程就会退出。如果我们需要一个机制,让线程能随时处理事件但并不退出, 这种模型通常被称作 Event Loop。 Event Loop 在很多系统和框架里都有实现,比如 Node.js 的事件处理,比如 Windows 程序的消…
iOS底层系统:Mach调度原理之调度原语
线程:和所有的现代操作系统一样,Mach内核调度的对象是线程。 任务:Mach中使用一个比进程更轻量级的概念:任务(task)。 最基本的单位是线程,一个任务包含一个或多个线程。 线程(thread)定义了match中最小的执行单元。 线程表示的是底层的机器寄存器状态以及各种调…
iOS 逆向 - LLDB
动态调试和静态分析都是我们必不可少的能力 . LLDB 是不管在正向开发还是逆向开发中 , 都是帮助我们调试必不可少的手段 . 而在逆向开发中不能像正向开发一样页面断点 , 可视化数据展示 , 源代码调试等方式的情况下 , LLDB 的作用就会尤其重要 . 考虑到并不是所有同学…
基于 Mach-O 符号重排减少缺页中断次数来提升 iOS App 启动速度的可行性分析
最近字节跳动技术团队放出了一篇文章:抖音研发实践:基于二进制文件重排的解决方案 APP启动速度提升超15%,提到通过重排 Mach-O中的二进制,减少启动流程中的缺页中断次数,为 App 节约了 200ms 左右的启动时间(根据抖音目前的启动速度估算),本着严谨的态度,本文将对…
深入iOS系统底层之函数调用
古器合尺度,法物应矩规。--苏洵 可执行程序是为了实现某个功能而由不同机器指令按特定规则进行组合排列的集合。无论高级还是低级程序语言,无论是面向对象还是面向过程的语言最终的代码都会转化为一条条机器指令的形式被执行。为了管理上的方便和对代码的复用,往往需要将某一段实现特定功能的指…
数据精度问题自查手册
在数据敏感的业务场景中,常常会碰到数据精度问题,尤其在金额显示、占比统计等地方,该问题尤为显著。由于数据的每一位有效数字都包含真实的业务语义,一点点偏差甚至可能影响业务决策,这让问题的严重性上升了几个阶梯。 一言以概之,凡是在运行过程中,导致数值存在不可逆转换时,就是精度丢失。…
iOS 底层 - 从头梳理 dyld 加载流程
了解 dyld 的加载流程可以帮我们更系统的了解 iOS 应用的本质 . 无论是在逆向方向或者在底层研究方面 , dyld 都是必不可少的领域 . 对流程梳理清楚可以帮助我们更好地了解一些基础原理 . 例如我们之前讲 分类底层原理详细研究流程 , load方法调用机制解析 , …
Block(二) 内存管理
1. 在某些ARC情况 会将栈内的block copy到 堆 中 2. copy 3. __block 在ARC环境下 block在赋值的时候 会发生拷贝。 具体的指向由下图所示。 这样的结构的好处是无论我们从栈中去找block找到__forwrding 还是堆中block__…