iOS安全攻防(十四)arm汇编之创建objc对象
2014-12-22 21:17
302 查看
个人原创,转帖请注明来源:cnblogs.com/jailbreaker
objc是完全面向对象的语言,所以逆向的重点就是逆向类,这篇帖子通过ida的神奇的f5功能,来逆向某个对象的创建。
我们直接看ida中的main方法的逆向出来的arm代码:
基本上看不出所以然,我们使用ida的f5分析得出c语法的伪代码如下:
提一下,我在源码中,把自动内存管理ARC关掉了,为的是让代码更整洁。
在 8,9行都看到objc_msgSend,这个objc_msgSend其实是编译器生成的代码,在源码中没有的,objc调用实例方法其实是动态的通过消息传递,只有在runtime的时候才能确定到底给哪个method去处理,也就是说编译期间根本无法确定函数地址。
objc_msgSend函数至少包括2个参数,第一个参数类型是id,也就是范型class,可以传递任何class;第2个参数类型是SEL,selector,暂时可理解method的字面声明,后面的帖子里会详细讲到selector。从第3个开始后面的参数就是SEL所指method需要的具体参数,本例中都只有2个参数。
最后看一下main 的源码:
objc是完全面向对象的语言,所以逆向的重点就是逆向类,这篇帖子通过ida的神奇的f5功能,来逆向某个对象的创建。
我们直接看ida中的main方法的逆向出来的arm代码:
基本上看不出所以然,我们使用ida的f5分析得出c语法的伪代码如下:
提一下,我在源码中,把自动内存管理ARC关掉了,为的是让代码更整洁。
在 8,9行都看到objc_msgSend,这个objc_msgSend其实是编译器生成的代码,在源码中没有的,objc调用实例方法其实是动态的通过消息传递,只有在runtime的时候才能确定到底给哪个method去处理,也就是说编译期间根本无法确定函数地址。
objc_msgSend函数至少包括2个参数,第一个参数类型是id,也就是范型class,可以传递任何class;第2个参数类型是SEL,selector,暂时可理解method的字面声明,后面的帖子里会详细讲到selector。从第3个开始后面的参数就是SEL所指method需要的具体参数,本例中都只有2个参数。
最后看一下main 的源码:
相关文章推荐
- iOS安全攻防(十一)arm汇编之寄存器简介
- iOS安全攻防(十三)arm汇编之函数(int参数)传递
- iOS安全攻防(十二)arm汇编之mov 和 mvn
- iOS安全攻防(十四):Hack实战——支付宝app手势密码校验欺骗
- iOS 如何创建单例对象
- iOS安全攻防(一):Hack必备的命令与工具
- iOS安全攻防(二):后台daemon非法窃取用户iTunesstore信息
- [转]objc_msgSend 的 ARM 汇编分析
- 【无限互联】iOS开发视频教程 — 3.2 类的声明和对象的创建—内存分析1
- iOS汇编教程:ARM(1)和ARM(2)
- iOS汇编教程:ARM(1)和ARM(2)
- GNU ARM汇编--(十四)GNU ARM汇编下做任务调度
- iOS安全攻防(一):Hack必备的命令与工具
- iOS汇编教程:ARM(2)
- iOS汇编教程:ARM(1)
- iOS安全攻防(二):后台daemon非法窃取用户iTunesstore信息
- IOS安全攻防(二)
- IOS 应用创建一个视图对象分析
- xcode反汇编调试iOS模拟器程序(五)调试objc_msgSend函数
- iOS动态特性初研究(利用JSON动态创建类型和对象)