前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >逆向从 Instruments 中获取 GPU 数据

逆向从 Instruments 中获取 GPU 数据

作者头像
Locker
发布2018-08-01 17:43:35
5.7K0
发布2018-08-01 17:43:35
举报
文章被收录于专栏:221-B221-B

背景: RTMP SDK需要获取硬编硬解时候的GPU数据,第一时间想起了TraceParser, 但是TraceParser不支持GPU Driver模板. 于是想着能不能扩展TraceParser模板. 发现main.m文件只有寥寥几行代码,完全不知道做了什么, 但是google和km之后发现应该是采用了反序列化的方式来dump出数据. 缺点很明显, 需要自己实现NSCoding,还需要先将.trace文件解压出.run文件. 不知道结构无从下手.

在 github 上发现有一种新的思路TraceUtility, 通过调用 Undocument API 去解析 Trace 文件. 下面结合 Hopper 分析Instruments看看.

在逆向过程中发现打开文档用的是NSDocument,-showTemplateChooser:模板选择器. 这意味着一个trace文件是通过NSDocument加上自定义文档类型(模板)来储存的, 当然这个文件类型并不会存在于MIME当中的.

-initialize:中对 Instruments 做了初始化, 包括一些链接 XCode 中 ShareFramework 的 Undocument 库.

在初始化完成之后,还有很重要的一步 —- 加载插件(PFTLoadPlugins()), XCode 8之后, Instruments 的插件就从Plugins文件夹下移到了Packages文件下面, 并且用了新的打包方式,以.instrdst扩展名结尾, 打开之后可以安装插件.如果不去安装, 在后面编码阶段发现是会抛除异常提示的. 相对的, 在-terminate:里面有PFTClosePlugins(). 基于以上条件, 可以直接通过调用接口来加载模板, 并且只有在加载了正确加载模板插件之后才能读入 Trace 文件.

在加载完 trace 文件之后就可以开始抽丝剥茧了.

根据这里的调试信息, 去 dump 出来的 instruments 头文件中搜索出需要的类, 放到自己的头文件当中, 成员变量的获取需要用到 runtime 特性.以我需要的 GPU 数据来说, 最后的层级关系如下:

123

PFTDocuments > XRTrace > XRInstrument > XRRun > _data或PFTDocuments > XRTrace > XRInstrument >XRAnalysisCoreStandardController > XRContextContainer

最后在格式化输出就好了.

配合 Python 脚本可以直接输出成 Excel 的形式更加可观, 甚至可以自动化跑起来,每天直接输出邮件, 监控迭代性能表现.

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-02-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档