xcode反汇编调试iOS模拟器程序
利用xcode反汇编调试iOS模拟器程序,动态分析系统行为,挖掘私有API,debug程序的运行时错误等。
hursing
我不会告诉你他是一只葵鼠哒 O(∩_∩)O
展开
-
gdb的info functions和lldb的image lookup的区别
两个命令都是搜索函数的。gdb的info functions是在内存中的symbol table查找,结果中的地址是内存里的地址,所以得到结果后,直接b(break,添加断点)这个地址,即可正确加断点。lldb的image lookup -s是在库文件中查找,结果中的地址是在library中的偏移地址,b这个地址是不能正确break的。正因为这个区别,gdb会比lldb更快得到结果。原创 2013-04-01 10:30:41 · 6115 阅读 · 0 评论 -
lldb的alias别名功能
之前老是得输入image lookup -r -s来搜索函数,好烦,认真看了下lldb Tutorial,学到不少方便的好东西,至少alias就满足我了。输入command alias il image lookup -r -s %1然后就可以这样il "UIWebView"来搜索UIWebView的函数了。不过用了别名后,必须得输入双引号,暂未发现怎么把这个也搞掉。已经少打好多字原创 2013-05-14 15:09:24 · 3418 阅读 · 1 评论 -
xcode反汇编调试iOS模拟器程序(八)反汇编自己的代码来掌握规则
掌握了基本技巧后,基本上已不难理解所有的反汇编结果。授之以鱼不如授之以渔:通过观察自己写的代码的反汇编来掌握各种代码的反汇编结果,从而逆向推测系统代码的源码。调试自己写的代码时,可以不断切换查看源码和反汇编来定位代码执行到何处这里分别用两个很简单的C++和Objective-C类来做示例:class TestC { int m_var; public:原创 2013-04-07 16:20:54 · 8854 阅读 · 0 评论 -
xcode反汇编调试iOS模拟器程序(七)Debug与Release的区别
首先自己写一段代码,加好断点,分别在Build Configuration为Debug和Release下运行,查看反汇编- (void)test{ UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(10.0, 20.0f, 30.1, 40)]; [button setTitle:@"test" f原创 2013-04-07 11:49:31 · 8829 阅读 · 1 评论 -
xcode反汇编调试iOS模拟器程序(六)函数出入口处的处理与局部变量
引用第二节的例子:函数的入口处,通常都是把esp的值传给ebp保存,然后下面的操作以ebp为基准做偏移量引用。因为esp作为栈指针,push和pop都会自动修改其值,所以用ebp可以不受影响。还有的常见情形是开头和结尾对应着subl $8, %espaddl $8, %esp这里体现着所谓的“局部变量在栈上分配”原则,说明本函数需要用8字节作为局部变量的保存空间。同时因为ebp已原创 2013-04-07 11:09:28 · 4687 阅读 · 0 评论 -
xcode反汇编调试iOS模拟器程序(五)调试objc_msgSend函数
反汇编调试objective-c,遇到最多的就是objc_msgSend这函数了,本节主要讲讲它的实现以及调试过程的一些技巧。以UIWebView为例子,看看它在loadRequest时做了什么。首先必须明白,原始代码中调用[uiWebViewInstance loadRequest:request]的实质是调用了objc_msgSend(uiWebViewInstance, "loa原创 2013-04-03 15:23:08 · 9858 阅读 · 4 评论 -
xcode反汇编调试iOS模拟器程序(四)自动断点应用之NSNotificationCenter
知道怎么查看后,先看看有什么实际应用,拿NSNotificationCenter来做实践吧。首先在某个容易进入的地方加断点,并停在那,例如main函数。在gdb或lldb输入命令,手工添加断点。如下图:输入的命令如下:b -[NSNotificationCenter addObserver:selector:name:object:]b -[NSNotificationCente原创 2013-04-02 17:05:37 · 5920 阅读 · 4 评论 -
xcode反汇编调试iOS模拟器程序(三)查看Objective-C函数与参数
在Objective-C函数的入口处(第一行)加断点,可用esp指针来探查参数。以esp为基址,往后的偏移分别是:0:函数执行完毕后的返回地址(不是返回值的地址哦)4:对象实例的指针,即self指针8:selector,实际是一个char数组型的字符串,即char*12:(如果有)第一个参数…(前一个参数的基址+前一个参数所占的字节数):(如果有)第n个参数由此原创 2013-03-26 07:19:40 · 7951 阅读 · 0 评论 -
xcode反汇编调试iOS模拟器程序(二)看懂反汇编
这里当然不会从零开始讲汇编代码了,零基础的话可以看看 王爽 写的书《汇编语言》,请自己找度娘或谷哥要了。这一节主要讲讲书上没有的东西。在xcode中看到的汇编语法不是熟悉的intel格式,而是叫AT&T汇编。基本上只要懂intel,at&t会很快上手。两者的区别请参考这篇文章:AT&T汇编http://blog.csdn.net/bigloomy/article/details原创 2013-03-26 16:09:19 · 10410 阅读 · 3 评论 -
xcode反汇编调试iOS模拟器程序(一)查看反汇编
iOS模拟器程序的实质就是Mac OS X程序,只不过它需要以模拟器为载体来运行显示。故它的反汇编代码指令都是x86 CPU的,不是真机上的arm指令。研究模拟器程序的反汇编有两个目的,或叫做好处:一是为了研究深入到iOS系统的类库,你可以较容易地发现私有API,以及看到系统的实现。二是,很直接地,模拟器调试比真机快。而且,相信大多数人更懂x86指令,各类高校教材的汇编教程都不是arm原创 2013-03-21 09:44:34 · 20589 阅读 · 0 评论