IDA反汇编/反编译静态分析iOS模拟器程序(九)block

简介: 在第三节 函数表示与搜索函数 提到block函数和普通的OC函数不同。 反汇编分析前需要理解block的实现原理,故推荐先看看这几篇文章及其所引用的参考资料: Block介绍(一)基础Block介绍(二)内存管理与其他特性block介绍(三)揭开神秘面纱(上)block介绍(四)揭开神秘面纱(下) block函数的命名与上文提到类似。

在第三节 函数表示与搜索函数 提到block函数和普通的OC函数不同。

反汇编分析前需要理解block的实现原理,故推荐先看看这几篇文章及其所引用的参考资料:

Block介绍(一)基础
Block介绍(二)内存管理与其他特性
block介绍(三)揭开神秘面纱(上)
block介绍(四)揭开神秘面纱(下)


block函数的命名与上文提到类似。函数内部定义的block会以scope命名,如:

@implementation ViewController

- (void)later
{
    [self presentViewController:self animated:NO completion:^{
        NSLog(@"wo yun");
        [self didReceiveMemoryWarning];
    }];
    
    [UIView transitionFromView:self.view toView:self.view duration:1 options:UIViewAnimationOptionTransitionCurlUp completion:^(BOOL finished) {
        NSLog(@"%d", finished);
    }];
}
在IDA中出现的名字分别为:

___23__ViewController_later__block_invoke
___23__ViewController_later__block_invoke6
全局型block:

int (^nimei)(int, id) = ^(int p1, id p2) {
    p1++;
    [p2 release];
    return 0;
};
显示为:

_nimei_block_invoke


由于block的实质是用一些结构体来保存调用信息,而结构体信息在release版的C++编译结果中是无明文的,所以在反汇编中block的传参看起来就是直接传到一块内存区域中,需要自己理解其排放顺序是参照那些结构体的。

以下是上面的源码- [ViewController later]函数的反汇编(Mac IDA):

__text:00001F30 ; =============== S U B R O U T I N E =======================================
__text:00001F30
__text:00001F30 ; ViewController - (void)later
__text:00001F30 ; Attributes: bp-based frame
__text:00001F30
__text:00001F30 ; void __cdecl -[ViewController later](struct ViewController *self, SEL)
__text:00001F30 __ViewController_later_ proc near       ; DATA XREF: __objc_const:00005590
目录
相关文章
|
存储 运维 安全
iOS加固原理与常见措施:保护移动应用程序安全的利器
iOS加固原理与常见措施:保护移动应用程序安全的利器
159 0
|
7月前
|
缓存 Java 测试技术
【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
817 3
【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
|
iOS开发
mac不通过Xcode直接打开IOS模拟器
mac不通过Xcode直接打开IOS模拟器
540 24
51单片机用汇编语言实现独立按键检测,每个按键有不同功能,包含按键消抖程序
51单片机用汇编语言实现独立按键检测,每个按键有不同功能,包含按键消抖程序
372 3
|
12月前
加快软盘操作速度的汇编程序源代码
加快软盘操作速度的汇编程序源代码
|
缓存 iOS开发
如何在Xcode删除某个版本的IOS模拟器
如何在Xcode删除某个版本的IOS模拟器
1231 1
|
程序员 编译器 数据处理
汇编高手秘籍:解锁性能优化新境界,用汇编语言让你的程序飞起来!
【8月更文挑战第31天】汇编语言作为编程基石,其高效性能备受推崇。尽管现代软件开发更偏爱高级语言,但在性能要求极高的场景下,汇编优化仍不可或缺。本文通过示例代码介绍四种优化技巧:循环展开、寄存器分配、指令重排及SIMD指令使用,显著提升执行效率。同时强调分析性能瓶颈、测试优化效果及保持代码可读性的重要性,助力开发者在关键代码路径上实现性能突破。
593 0
|
编译器 开发者 C++
8086 汇编笔记(三):第一个程序
8086 汇编笔记(三):第一个程序
|
存储 编译器
C51汇编程序
C51汇编程序
207 5