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

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

打开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中的表示(没有debugging symbols的函数):

+[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模拟器程序(二)加载文件与保存数据库

下一篇:IDA反汇编/反编译静态分析iOS模拟器程序(四)反汇编的符号信息与改名

本文请勿转载。

目录
相关文章
|
21天前
|
缓存 Java 测试技术
【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
151 3
【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
|
7月前
|
缓存 iOS开发
如何在Xcode删除某个版本的IOS模拟器
如何在Xcode删除某个版本的IOS模拟器
747 1
|
7月前
|
iOS开发
mac不通过Xcode直接打开IOS模拟器
mac不通过Xcode直接打开IOS模拟器
316 24
|
8月前
|
Swift iOS开发 Kotlin
苹果iOS新手开发之Swift中实现类似Kotlin的作用域函数
Swift可通过扩展实现类似Kotlin作用域函数效果。如自定义`let`, `run`, `with`, `apply`, `also`,增强代码可读性和简洁性。虽无直接内置支持,但利用Swift特性可达成相似功能。
97 7
|
10月前
|
存储 Android开发 iOS开发
iOS不支持HEIC格式的图片显示和标签函数显示问题及解决方案
iOS不支持HEIC格式的图片显示和标签函数显示问题及解决方案
296 0
|
10月前
|
iOS开发
iOS之使用模拟器报错:resource fork, Finder information, or similar detritus not allowed完美解决方案
iOS之使用模拟器报错:resource fork, Finder information, or similar detritus not allowed完美解决方案
6645 0
|
10月前
|
移动开发 Android开发 iOS开发
ios标准页面调用HTML5页面和HTML5调用ios的函数
ios标准页面调用HTML5页面和HTML5调用ios的函数
62 0
|
10月前
|
C语言
【汇编语言实战】基础知识+函数的引用(求1+2+..+N)+OllyDBG的使用
【汇编语言实战】基础知识+函数的引用(求1+2+..+N)+OllyDBG的使用
64 1
|
10月前
|
前端开发 rax Linux
汇编语言与x64函数参数传递
汇编语言与x64函数参数传递
292 0
|
10月前
|
编译器 API C语言
在x86架构汇编语言中函数参数传递的三种约定
在x86架构汇编语言中函数参数传递的三种约定
278 2

热门文章

最新文章

  • 1
    【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
  • 2
    iOS|解决 setBrightness 调节屏幕亮度不生效的问题
  • 3
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
  • 4
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
  • 5
    Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
  • 6
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
  • 7
    iOS各个证书生成细节
  • 8
    iOS|记一名 iOS 开发新手的前两次 App 审核经历
  • 9
    为什么C/C++编译腰要先完成汇编
  • 10
    iOS MapView(定位)