8/12/2015 gandalf
1.查找app入口点
ida对ipa文件部分函数解析有点问题,比如入口点通常解析不出来
ios应用启动后的main都会执行UIApplicationMain来创建实例,而UIApplicationMain通常也会调用其他模块启动应用
所以可以在Improts中搜索_UIApplicationMain,再通过x跳转到调用地址
2.函数表示
以UIView为例
objective-c:
+ (void)beginAnimations:(NSString *)animationID context:(void *)context
- (void)drawRect:(CGRect)rect
- (id)initWithFrame:(CGRect)aRect
- (void)removeFromSuperview
@property(nonatomic) CGRect frame
|
gdb/lldb:
+[UIView(Animation) beginAnimations:context:]
-[UIView(Rendering) drawRect:]
-[UIView initWithFrame:]
-[UIView(Hierarchy) removeFromSuperview]
-[UIView(Geometry) frame]
-[UIView(Geometry) setFrame:]
|
xdb表示的特点是:
- 省略返回值
- 省略参数类型声明与形参
- 函数名与类名之间有一个空格,多参数之间不含空格,直接是冒号分割
- 类名后紧跟着category名
- property被展开,readwrite属性的property会等于两个函数,set函数会有set前缀和第一个字母大写(@property时显式声明函数名的话也许不同)
IDA:
__UIView_Animation__beginAnimations_context__
__UIView_Rendering__drawRect__
__UIView_initWithFrame__
__UIView_Hierarchy__removeFromSuperview_
__UIView_Geometry__frame_
__UIView_Geometry__setFrame__
|
其特点就是把xdb表示法中除字母数字外的字符都用下划线代替
3.符号信息
3.1 IDA计算出了成员变量的偏移地址并把symbol直接显示出来
IDA: __text:000026C4 mov ebx, ds:(_OBJC_IVAR_$_TestButton_m_model - 26C3h)[esi]
xdb: 0x26c2: movl 13207(%esi), %ebx
|
3.2 函数参数在IDA中被赋予名称
IDA: __text:000026CA mov edi, [ebp+arg_0]
xdb: 0x26c8: movl 8(%ebp), %edi
|
ebp+8为arg_0,ebp+12为arg_1,arg即为argument的缩写
对于Objective-C函数,arg_0都是self
0 评论:
发表评论