动机
这个项目主要还是给我的其他一大堆操作iOS内核的工具用的
我在写内核相关工具的时候经常会碰到这些问题:
- 读着读着就读越界了,每个指针都得错误处理,否则直接设备就panic了,非常痛苦
- 不同的系统上偏移不一样,一动就得全改一遍
- TFP0在iOS14之后又不好弄了,libkrw之类的接口有不一样
- patchfinder每次都得找好久
- 每层指针都得写一大条指令,多层指针很痛苦
需求
- 集成patchfinder、tfp0/libkrw等读写方式
- 能够处理不同iOS版本之间的偏移问题
- 自动检查防止读取越界
- 像直接使用内存用”→”一样来使用内核结构体,且支持多层结构体
方案
- 使用Cpp Template重载→运算符,返回对一个Pointer的封装,里面包含有父对象的信息和偏移的信息,形成一个多层指针
- 懒加载,在取值时才做具体内核读写,减少内核读写次数
- 内核读写时检查读写的范围,如果超出范围则直接返回,避免出现panic
- 抄了dimento的patchfinder,最高支持iOS 14