基于汇编实现 hook objc_msgSend,统计方法耗时的方案

文章目录


简介

首先,iOS 中进行 hook 的方案有多种,这里使用的是 Facebook 的 fishhook 库:Github:fishhook

hook objc_msgsend ,货拉拉技术团队已有完善的方案:基于汇编实现objc_msgSend hook方法耗时的方案

另外,它们还开源了基于fishhook、汇编 hook objc_msgsend 并支持方法耗时可视化的项目:hll-wp-guldan-ios

接入

首先在 Podfile 中添加:

cpp 复制代码
pod 'Guldan', :git => "https://github.com/HuolalaTech/hll-wp-guldan-ios.git"

然后设置要监控的代码片段:

objectivec 复制代码
[GDNOCMethodTimeProfiler start];
// 下载图片
[self downloadImages];
[GDNOCMethodTimeProfiler stop];
[GDNOCMethodTimeProfiler handleRecordsWithComplete:^(NSArray<NSString *> * _Nonnull filePaths) {
       // file path
       for (NSString *filePath in filePaths) {
             NSLog(@"File path: %@", filePath);
         }
   }];

从控制台拿到 path:

最后将 path 的文件拖入 chrome://tracing/ :

经测试,模拟器(arm64)和真机均支持,不支持模拟器(x86_64)。

相关推荐
Swift社区22 分钟前
iOS 基于 Foundation Model 构建媒体流
ios·iphone·swift·媒体
花阴偷移2 小时前
逆向基础--汇编源程序认识(08)
汇编
上去我就QWER2 小时前
macOS下如何全文检索epub格式文件?
macos
库奇噜啦呼2 小时前
【iOS】音频与视频播放
ios·音视频·cocoa
谢娘蓝桥3 小时前
Mac 安装 Xcode 及qt 环境安装
ide·macos·xcode
witton6 小时前
克隆整个macOS系统到新磁盘
macos·asr·克隆·复制·迁移·恢复·restore
csdn_aspnet8 小时前
如何在 Mac、Ubuntu、CentOS、Windows 上安装 MySQL 客户端
linux·windows·mysql·macos·centos
我的golang之路果然有问题8 小时前
mac M系列芯片 unity 安装会遇到的错误以及解决
经验分享·学习·macos·unity·游戏引擎
大熊猫侯佩10 小时前
黑衣人档案:用 Apple Foundation Models + SwiftUI 打造 AI 聊天机器人全攻略
ios·swiftui·ai编程
大熊猫侯佩10 小时前
侠客行・iOS 26 Liquid Glass TabBar 破阵记
ios·swiftui·swift