• IDA反汇编/反编译静态分析iOS模拟器程序(三)函数表示与搜索函数


    打开IDA一般都是去搜索函数,可以说函数是IDA工程的基本单位吧,数据结构什么的都是为函数服务而已。函数列表在界面左侧的Functions Window:


    可以看到,UIKit有27789个函数呢。在搜索前要先知道函数的表示方式。

    Objective-C函数的表示:

    拿UIView来做例子吧。在xcode documentation中,UIView的函数会有这样的表示:

    + (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表示法中除字母数字外的字符都用下划线代替。

    (block型的函数会较复杂,后面的章节再讲)

    C++函数的表示:

    和xdb的格式差不多,不单独列了。基本格式为:

    命名空间名::类名::函数名(参数类型,参数类型...)

    默认命名空间的话就会没有前面的名字和两个冒号。C函数没有类名,有的C函数实际有参数,但在IDA中不显示。

    尽量列我所看到的规则吧:

    • 省略返回值,省略形参
    • 空参数时会表示为 函数名(void)
    • 指针型参数是 类型+空格+* ,引用型参数是 类型+空格+&
    • const型参数的const声明在后,有空格隔开,在*和&之前
    • const型函数的const省略
    • 参数的typedef会展开,例如CFDictionaryRef会变成__CFDictionary const*
    • 参数类型也要加命名空间名

    一些函数示例如下:

    WebCore::loaderRunLoop(void)
    WebCore::runLoaderThread(void *)
    WebCore::CustomEvent::~CustomEvent()
    WebCore::CustomEvent::initCustomEvent(WTF::AtomicString  const&, bool, bool, WebCore::ScriptValue)
    WebCore::LegacyWebArchive::createResource(__CFDictionary  const*)
    _WKViewAddSubview


    好了,知道函数名的表示规则之后,就可以搜索你想看的函数了。

    激活Functions Window(随便点击一行令本窗口处于焦点状态),顶部菜单Search->Search...->输入函数名->OK。IDA的是模糊搜索,可以不填全名,只要你能确保输入的字符会令搜索结果唯一就行,匹配中的话就会跳到那个函数处,双击这条函数,就能在右边窗口看到此函数的反汇编代码了。如果搜索结果有多个,可以在顶部菜单->Search->Search again跳到下一个。

    Search快捷键为Alt+T,Search again的快捷键为Ctrl+T。

    下图为整体效果(点击查看大图):



    一般来说,看着xcode文档也难以确定其实际函数名的,先用xdb搜索一遍再对照规则在IDA里查找会便捷些。


    上一篇:IDA反汇编/反编译静态分析iOS模拟器程序(二)加载文件与保存数据库

    转载请注明出处:http://blog.csdn.net/hursing


  • 相关阅读:
    最大连续序列和
    打印有序链表的公共部分
    字符串最长子串大小
    jvm简介
    大浮点数乘法
    java代码的快速排序理解
    从内存分配分析程序初始化和存储
    时间复杂度
    Filter&Listener
    MVC开发模式&EL表达式&JSTL&三层架构开发
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3078611.html
Copyright © 2020-2023  润新知