读书人

[iOS逆向工程] 在编译语言调试中获取当

发布时间: 2012-12-23 11:28:15 作者: rapoo

[iOS逆向工程] 在汇编语言调试中获取当前实例句柄
在分析Safari行为的时候想到要用objective-c的特性随时可以语义化的查看一下UIView的各种状态,比如在UIView方法内部设了个断点,想看一下当前视图结构。只要得到当前实例的句柄就可以了。查了一些资料,记录一下。
函数参数的传递
iOS Simulator里应用是跑在32bits模式下的(在Activity Monitor可以看到),依据<<Mac OS Debug Magic>>里关于Intel 32bits参数传递的定义:
Table 2 : Accessing parameters on Intel 32-bit(64bits是先使用通用寄存器来传递参数,不足时再使用其它方式)WhatGDB Syntaxreturn address*(int*)$espfirst parameter*(int*)($esp+4)second parameter*(int*)($esp+8)... and so on 如果已经进入到函数体,也就是过函数参数处理部分(开场位置, prologue), 参数就要到调用帧寄存器(frame register)ebp中去获取了。

Table 3 : Accessing parameters after the prologue

WhatGDB Syntaxprevious frame*(int*)$ebpreturn address*(int*)($ebp+4)first parameter*(int*)($ebp+8)second parameter*(int*)($ebp+12)... and so on 返回值存放在EAX寄存器中。

既然知道参数是如何存储的,那C++和Objective-C是如何传递当前实例的句柄的呢?
答案在同一份文档的这里:

当在汇编语言下调试Cocoa代码,请记住以下运行时特性:

读书人网 >操作系统

热点推荐