码迷,mamicode.com
首页 > 移动开发 > 详细

[iOS逆向实战 之四]创建objc对象

时间:2014-12-22 22:28:01      阅读:218      评论:0      收藏:0      [点我收藏+]

标签:

个人原创,转帖请注明来源: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 的源码:

技术分享

[iOS逆向实战 之四]创建objc对象

标签:

原文地址:http://www.cnblogs.com/jailbreaker/p/4178991.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!