越狱手机Reveal的动态库加载流程
结论
Reveal动态库加载流程如下图:
红色’dlopen’箭头代表:左边被加载的库内部会调用dlopen加载箭头右边的库。
箭头1号相继dlopen了右边的两个库。
substitute-inserter.dylib、libsubstitute.dylib、substitute-loader.dylib属于越狱后系统所带的库,可以从Cydia中看到。
RHRevealLoader.dylib、libReveal.dylib属于Reveal的库。
背景
越狱手机配置Reveal后,可以查看手机所安装的App的界面结构如下图:
这里有一个困扰我的问题:Reveal能够查看越狱手机所安装的所有App运行起时界面结构,它是如何做到的呢?
推测其运作...
LLDB断点脚本——调用栈中多函数名匹配
诉求的产生
项目中有某一个函数funZ,调用到函数funZ的路径可能有多个,例如:
funA -> funB -> funZ
funC -> funB -> funZ
funD -> funE -> funZ
funA -> funX -> … -> funZ
此时我们在函数funZ打下断点的时候,就可能是由以上路径到达该函数(即funZ函数断点触发时候,调用栈可能存在的函数名称列表)。如果我们只想在特定的一条路线到达funZ的时候才触发断点,此时LLDB基本的断点命令已经解决不了了,那我们该怎么达到这种效果呢?可以通过自定义断点命令脚本来完成目标。
脚本的功能Case目标
当匹配成功时,funZ函数设...
LLDB——Symbolication
Crash logs符号化的方式
Xcode 自动化解析。
命令行工具symbolicatecrash + 对应UUID的dSYM。
LLDB命令/脚本。
绝大多数情况下我们会使用第二种方式,因为公司每个app发布的历史版本都保留着对应的可执行文件与dSYM,出现线上闪退/常卡顿上报,都可以通过这种方式解决。那我们还需要LLDB命令/脚本进行符号化么?会,这里列举一些场景:
特殊情况下,某些测试企业包可能很难以找到对应的dSYM文件。这个时候我们可以查看Crash logs日志文件对应各个库的UUID,并从已有的dSYM文件中检索,分别找到各个库UUID对应的dSYM文件,逐个映射。
制作专属的解析工具。
挖掘更细的信息,比如闪退时候的堆栈汇编、...
LLDB脚本——查看对象创建时的栈
脚本的出处
msl脚本
28-sb-examples-malloc-logging文章
脚本的诉求起因
标题中“创建时的调用栈区”指的是我们经常所说的‘Malloc Stack’,也就是项目的‘Scheme’下的‘Malloc Stack Logging’——以下简称MSL,如下图:
如果要使用MSL这项功能,我们需要在项目运行之前勾选上图中的选项。
假设我们的项目在运行中,并且在运行前Scheme中没有勾选MSL选项,可是我们又期望在运行过程随时中打开该功能,以便于从此刻记录将要生成的对象的Malloc Stack,那我们该怎么办呢?这就是该脚本的诉求。
脚本支持的功能
脚本支持在项目Debug期间,通过命令行实现以下功能:
随时开启/关闭MSL功能。
...
OpenGL-ES Check List
前言
概括性的记述OpenGL ES 的渲染流程,简明性的列出《OpenGL ES 3.0编程指南》中提到需要注意与可优化的点。
从iOS平台切入开展,内容会不断更进。
目的是为了便于脱离书,快速回顾要点与书中指出的优化点。
渲染管线以及优化点
渲染管线图
上下文管理
创建上下文
EAGLContext *eglContext = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES3];
切换上下文
[EAGLContext setCurrentContext:eglContext];
删除当前上下文
if ([EAGLContext currentContext] == self....
OpenGL 的 Mac 配置
前言
记录自己在Mac上的配置的实践过程。(系统macOS Mojave 版本 10.14.6)
OpenGL ES 或者说计算机图形学的学习,是离不开图形学基础的,而图形学经典书籍关联的都是OpenGL操作的,出于此,就需要在Mac上配置OpenGL环境。
配置流程
First
Mac 电脑。
安装 Xcode (后续开发OpenGL使用)。
CMake
检查是否配置了 cmake ——打开终端命令行输入 cmake 后回车,如果提示 “cmake: command not found”,则进行一下步骤安装,如果已安装则跳过此小段。
前往 cmake 官方下载下载 CMake dmg,要下载Platform 为 Mac 的。如 图-1:
...
GPUImage2中的GaussianBlur(高斯模糊滤镜)
前言
在了解GPUImage2 中GaussianBlur的实现与优化之前需要读者先了解如下图形知识:
卷积。卷积相关的基础可参考这篇理解图像卷积的意义。
高斯模糊算法。高斯模糊是基于高斯函数的权重分布,生成的卷积核。可先阅读这篇高斯模糊算法。
二阶高斯线性可分,属于常见的实现上会用到的一个理论点。可以参考二维卷积分为一阶卷积
具备了这些前提知识后我们就可以来看,GPUImage2的高斯模糊算法,以及作者实现中的优化了。本文所用的变量名称都是源码中的变量名称。
GPUImage2中的GaussianBlur实现
顶点与片段着色器配置流程与优化
GPUImage2里面的GaussianBlur实现流程中包含了一些实现优化。顶点片段着色器算法配置实现的大概流程如...
共计 9 篇文章,2 页。