iOS OC反汇编

简介: OC的反汇编

OC的反汇编


笔记暂时提交, 日后修正


1. OC方法本质


objc_msgSend(id , sel), 汇编打印x0, x1来获取 id ,以及 sel -> objc_msgSend
iOS9 [[对象 alloc] init] -> 两次objc_msgSend
iOS11 对象alloc -> objc_alloc + objc_msgSend (init)
iOS11 以后 (iOS 13.5测试情况) 对象alloc -> objc_alloc_init (不再走objc_msgSend)
创建对象后 (局部变量) -> objc_storeStrong (id * (对象指针) , id ) -> objc_storeStrong (&p, nil) -> objc_release


2. 工具反汇编


hopper, 烂苹果, IDA
block的反汇编 -> 找到invoke代码 (实现代码)
objc_retainBlock
hopper (汇编,流程图, 伪代码)


总结:


汇编: 函数那一块

1024 = 1k   数量单位
1024B (byte) = 1KB     容量单位
64位 -> 32个寄存器
w寄存器 x寄存器
pc寄存器 sp -> 栈顶  fp -> 栈底
sub sp 拉伸 -> 16字节对齐 !!
ldr (load register) -> 读   str (store register) -> 写
bl -> lr x30 (回家的路) -> ret读lr去返回上个函数
函数调用栈 -> 拉伸栈 (sub sp) -> 栈平衡 (add sp)
nzcv (32位) 状态寄存器 -> 最高四位
adrp 寻址 (adress page) -> pc寄存器 低12位清零 + offset
adrp x2 2           0x104dda060 + 2 = 0x104dda000 + 2
add x2 x2 #070      0x104ddc070
循环选择判断
cmp 比较 -> nzcv 状态寄存器 -> b
无符号判断 -> switch 两头掐




目录
相关文章
|
Swift iOS开发
iOS OC混编Swift 后者无法走断点
iOS OC混编Swift 后者无法走断点
81 0
|
安全 数据安全/隐私保护 iOS开发
iOS 初探代码混淆(OC)
自己做iOS开发也有几年的时间了,平时做完项目基本就直接打包上传到Appstore上,然后做上架操作了。但是最近,客户方面提出了代码安全的要求。说是要做代码混淆,这方面的工作之前从来没有接触过。然后就上网查了一下,原来有很多应用程序都做了代码混淆。看来是我固步自封了......
iOS 初探代码混淆(OC)
|
存储 Unix 编译器
|
存储 算法 iOS开发
|
Swift iOS开发 容器
iOS 仿支付宝银行卡界面(支持Swift/OC)
在有支付相关的APP中,都有对应的钱包,虽然现在的支付宝,微信支付很流行,但是都是需要绑定自己的银行卡,那么这个银行卡的卡包页面该怎么实现呢?在网上找了许久也没有找到合适的,那就索性自己造轮子。
383 0
|
编解码 Swift iOS开发
iOS 应用之间的跳转(OC&Swift)
iOS 应用之间的跳转(OC&Swift)
1083 0
iOS 应用之间的跳转(OC&Swift)
|
开发工具 Swift iOS开发
iOS 问题 1: OC项目导入swift三方库不兼容问题
iOS 问题 1: OC项目导入swift三方库不兼容问题
1107 0
iOS 问题 1: OC项目导入swift三方库不兼容问题
|
iOS开发
iOS逆向 04:OC反汇编(下)
iOS逆向 04:OC反汇编(下)
285 0
iOS逆向 04:OC反汇编(下)
|
编译器 iOS开发
iOS逆向 04:OC反汇编(上)
iOS逆向 04:OC反汇编(上)
186 0
iOS逆向 04:OC反汇编(上)
|
iOS开发
iOS - OC NSSize 尺寸
前言 结构体,这个结构体用来表示事物的宽度和高度。 typedef CGSize NSSize; struct CGSize { CGFloat width; CGFloat height; }; typedef struct ...
1008 0