UIWebView体系结构(六)UIWebView

UIWebView的实际成员变量都由UIWebViewInternal保存,UIWebViewInternal的声明如下: @interface UIWebViewInternal : NSObject { UIScrollView *scroller; UIWebBrowserView *browserView; UICheckeredPatternView *ch...
阅读(7905) 评论(0)

UIWebView体系结构(五)_UIWebViewScrollView和UIWebScrollView

_UIWebViewScrollView的继承链为:_UIWebViewScrollView->UIWebScrollView->UIScrollView。 通过反编译可以得到实现。_UIWebViewScrollView和UIWebScrollView的实现为:(代码好长,点此跳过) @interface UIWebScrollView : UIScrollView - (void)d...
阅读(6551) 评论(0)

UIWebView体系结构(四)UIWebBrowserView

UIWebBrowserView的声明如下:(代码好长,点此跳过) @interface UIWebBrowserView : UIWebDocumentView { UIWebFormAccessory *_accessory; NSObject *_input; DOMNode *_currentAssistedNode; DOMNode *_assis...
阅读(9584) 评论(0)

UIWebView体系结构(三)UIWebDocumentView和WebView

WebView是UIWebDocumentView最重要的组合对象,先讲WebView吧。 WebView的声明如下:(代码好长,点此跳过) @interface WebView : WAKView { WebViewPrivate *_private; } + (void)registerViewClass:(Class)arg1 representationClass:(Cl...
阅读(8278) 评论(2)

UIWebView结构体系(二)UIWebTiledView和WAKWindow

UIWebTiledView是UIWebBrowserView->UIWebDocumentView->UIWebTiledView继承链中的老爷子,但这三个类的职能却是MVC的关系,UIWebBrowserView是Controller,UIWebDocumentView是Model,UIWebTiledView是View。(这也是我第一次见到这样的设计,很有意思) 它的声明为: (代码好长,...
阅读(4097) 评论(0)

UIWebView体系结构(一)概貌

UIWebView属于UIKit,封装了WebKit.framework的WebView; WebView组合管理了WebCore.framework的Page,并提供了各种Clients; Page管理了Main Frame,Main Frame管理了sub Frame(FrameTree)。 UIWebView层(点击图片查看全图): WebView层(点击图片查看全图...
阅读(7214) 评论(3)

xcode反汇编调试iOS模拟器程序(八)反汇编自己的代码来掌握规则

掌握了基本技巧后,基本上已不难理解所有的反汇编结果。授之以鱼不如授之以渔: 通过观察自己写的代码的反汇编来掌握各种代码的反汇编结果,从而逆向推测系统代码的源码。 调试自己写的代码时,可以不断切换查看源码和反汇编来定位代码执行到何处 这里分别用两个很简单的C++和Objective-C类来做示例: class TestC { int m_var; public:...
阅读(6709) 评论(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...
阅读(7234) 评论(1)

xcode反汇编调试iOS模拟器程序(六)函数出入口处的处理与局部变量

引用第二节的例子: 函数的入口处,通常都是把esp的值传给ebp保存,然后下面的操作以ebp为基准做偏移量引用。因为esp作为栈指针,push和pop都会自动修改其值,所以用ebp可以不受影响。 还有的常见情形是开头和结尾对应着subl $8, %esp addl $8, %esp这里体现着所谓的“局部变量在栈上分配”原则,说明本函数需要用8字节作为局部变量的保存空间。同时因为ebp已...
阅读(3490) 评论(0)

xcode反汇编调试iOS模拟器程序(五)调试objc_msgSend函数

反汇编调试objective-c,遇到最多的就是objc_msgSend这函数了,本节主要讲讲它的实现以及调试过程的一些技巧。 以UIWebView为例子,看看它在loadRequest时做了什么。 首先必须明白,原始代码中调用 [uiWebViewInstance loadRequest:request]的实质是调用了objc_msgSend(uiWebViewInstance, "loa...
阅读(6835) 评论(6)

《IDA Pro权威指南》读书笔记

IDA 6.1 预破解版 种子下载地址 http://thepiratebay.se/torrent/7686769/。 如果不能下了,谷歌搜索 “Hex-Rays Ida Pro Advanced Edition v6.1.1 PreCracked”。 Names窗口: F,常规函数 L, 库函数 I,导入的名称。与库函数的区别:没有代码 G,命名代码 D,数据 A,字符串...
阅读(5490) 评论(2)

xcode反汇编调试iOS模拟器程序(四)自动断点应用之NSNotificationCenter

知道怎么查看后,先看看有什么实际应用,拿NSNotificationCenter来做实践吧。 首先在某个容易进入的地方加断点,并停在那,例如main函数。在gdb或lldb输入命令,手工添加断点。如下图: 输入的命令如下: b -[NSNotificationCenter addObserver:selector:name:object:] b -[NSNotificationCente...
阅读(4502) 评论(6)

gdb的info functions和lldb的image lookup的区别

两个命令都是搜索函数的。 gdb的info functions是在内存中的symbol table查找,结果中的地址是内存里的地址,所以得到结果后,直接b(break,添加断点)这个地址,即可正确加断点。 lldb的image lookup -s是在库文件中查找,结果中的地址是在library中的偏移地址,b这个地址是不能正确break的。 正因为这个区别,gdb会比lldb更快得到结果。...
阅读(4091) 评论(0)
    个人资料
    • 访问:918375次
    • 积分:9048
    • 等级:
    • 排名:第1929名
    • 原创:123篇
    • 转载:0篇
    • 译文:0篇
    • 评论:407条
    联系方式
    博客专栏
    最新评论