主页

越狱手机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实现流程中包含了一些实现优化。顶点片段着色器算法配置实现的大概流程如...

阅读更多