返回
iOS逆向:探寻内存来源的神奇工具——Malloc Stack 追踪
IOS
2023-11-20 20:40:44
iOS逆向之旅中,内存调试至关重要。Malloc Stack 作为 lldb 中的一把利器,赋予开发者追踪内存来源的超能力,揭开 iOS 应用内存管理的重重迷雾。
Malloc Stack 的魔法
Malloc Stack 是一个强大的调试工具,允许开发者在运行时检查任何内存地址的 malloc 和 free 记录。通过打印出对象的创建堆栈,Malloc Stack 为逆向工程师提供了追踪特定方法调用栈的便捷途径。
开启 Malloc Stack 追踪
开启 malloc stack 追踪的过程非常简单:
- 在 lldb 中,使用以下命令:
settings set target.malloc-stack-size 0x1000
- 重新运行应用程序,此时 malloc stack 将被激活。
追踪内存来源
Malloc Stack 跟踪内存分配和释放记录后,即可轻松追踪特定内存地址的来源。
- 使用 lldb 的
p
命令打印内存地址的内容。 - 如果该地址指向一个对象,则 lldb 将显示对象的详细信息,包括其类名和创建堆栈。
- 通过检查创建堆栈,可以追踪到该对象的创建位置。
实战案例
例如,假设我们想追踪一个 UIView 的创建位置:
(lldb) p $0x12345678
(UIView *) $0x12345678 = 0x0000000000123456
(lldb) bt 20
[ 0 ] > -[MyViewController loadView]
[ 1 ] -[UIViewController loadViewIfRequired]
[ 2 ] -[UIViewController view]
[ 3 ] -[UIView(UIResponder) nextResponder]
...
从创建堆栈中可以看出,该 UIView 是在 - [MyViewController loadView]
方法中创建的。
应用场景
Malloc Stack 追踪技术在 iOS 逆向中具有广泛的应用:
- 内存泄漏分析: 通过追踪对象创建和释放记录,可以识别潜在的内存泄漏。
- Objective-C/Swift 代码分析: 了解对象的创建和销毁时机,帮助分析代码中的内存管理问题。
- 程序崩溃分析: 追踪崩溃时对象的状态,有助定位引起崩溃的根本原因。
总结
Malloc Stack 追踪是一项强大的技术,它为 iOS 逆向工程师提供了深入了解内存管理行为的宝贵工具。掌握这项技术,可以显著提高你的逆向能力,让你更自信地探索 iOS 应用程序的内部运作。