- 博客(13)
- 资源 (1)
- 问答 (1)
- 收藏
- 关注
原创 iOS高级工程师该掌握哪些知识?
作为一个6年的iOS开发者,经历了从UI到底层的探索,也经历了很多大公司的面试。不自觉的要去归纳大厂对iOS高级工程师有哪些能力上的要求。1.数据结构与算法其实基本没有逃脱严蔚敏那本《数据结构与算法》的范畴。我刚毕业时有次被阿里的面试官问到kmp算法,我心想这是啥高级算法,当场回答不会。后来去复习的时候,才发现其实这其实是在自己大学课本里面的算法。大学里面没有去搭理这个算法,以至于错失一次毕业就进大厂的机会。具体来说,我按面试频率高低来排个序:* 排序算法(快排、希尔、归并、堆排)* 二叉树 (
2021-09-13 16:41:25
409
原创 反汇编iOS App为可编译xcode工程
我研究了反编译的原理,发现好多反编译工具只会帮忙翻译出代码段的汇编语言,没有办法直接反编译成可以直接编译执行的xcode工程(hopper disassmbler 和ida反汇编的无法编译),因为我利用工具otool -tV machOFile,先反编译出代码段,然后对照clang -S xxx.m 编译出的汇编语言,写了一个工具,将数据段的变量也反汇编到代码,生成了一个oc xcode工程对应的 汇编xcode工程,验证了执行结果是一样的。但是,更为复杂的工程,需要更为精细地了解maco-O dyld-i
2021-08-31 17:56:28
590
原创 fishHook实现原理
fishhook原理像NSLog这种系统提供的函数是在动态库里面的。在动态库的实现代码被加载之前,"NSLOG"这个符号会对应到一个叫做lazy_symbol_Pointers(__la_symbol_ptr)的表里面的某一项,这一次项的值将会存放指向NSLOG函数的实现地址。这个地址在调用到NSLOG函数的时候才会被填入。MachO文件分为三部分:header段(CPU架构、文件大小等简要信息)load commands指名动态库等资源如何被加载data (存放代码\符号表\字符表\
2021-07-14 16:45:10
254
原创 记一次越狱砸壳iOSApp的艰辛过程
越狱砸壳目的:学习别人家的优秀app越狱的过程:1.先用un越狱ios13.5.1 各种折腾,失败;找了一台iOS 12.5.1爱思越狱,各种折腾,然后失败;某鱼花200买了台iOS10 iphone 5s,越狱失败(Cydia闪退且无法抹除数据);再买一台iphoen 6p iOS 10.2.1 (¥368),爱思越狱终于成功。2.显示用dumpdecrypted砸了主mach-o文件,但是发现还有动态库frameWork 文件也需要砸壳参考这篇文章iOS逆向(11)-砸壳原理剖析,主动加
2021-07-09 10:51:30
1241
原创 自旋锁、互斥锁、信号量、读写锁、递归锁、乐观锁、悲观锁的底层实现
自旋锁、互斥锁、信号量、读写锁、递归锁、乐观锁、悲观锁(一)我们知道 每个操作系统都有这样一些锁,各个锁之间好像可以互相转换,但概念上又总是模棱两可。下面从Linux系统对这些锁的实现方式下手,谈一下这些锁之间的联系。原子性:一条汇编指令的执行过程中是原子性的,cpu不可能将一条汇编语言执行一半,然后去执行别的汇编指令。这称为原子性,及,一条汇编语言就是cpu最小的执行时间单位,不可以分割,执行的时候不可暂停。因此,实现单一变量的原子读写操作是容易的,只要保证读写操作只对应一条汇编语言即可。但是,很多
2021-06-22 14:49:29
922
1
原创 C语言逆向分析
下面有这样一个简单的//file 1.c#include <stdio.h>int add(int a,int b){return a+b;}int main(){int result = add(1,2);printf("%d\n",result);return 0;}我们使用 gcc -S 1.c ,可以将 上面这段代码转换为同目录下的 1.s 汇编文件,其内容如下: .file "1.c" .text .globl add .type add, @func
2021-05-06 11:28:26
572
原创 GPUImage中的生产流水线
我们知道,GPUImage 是一个著名的图片滤镜处理工具,里面提供了一百多种滤镜,需要什么滤镜,就把需要的滤镜添加到targets 中去,实现任意滤镜直接的组合。那么这种滤镜任意的组合是怎么实现的呢?我们可以把GPUImage 看做是一个照片处理工厂,工厂里面有一个处理图像的流水线,流水线上有数台机器,每一台机器其实是一个叫做帧缓存(FrameBuffer)的盒子,每一个盒子就是一个图像处理单元。每个单元处理完图片之后,就将图片交给下一个处理单元(FrameBuffer)去处理。如图,所示,每一个Fr
2020-07-02 17:20:55
223
原创 一道关于 GCD\RunLoop的面试题
一道关于 GCD\RunLoop的面试题下面这道题打印出来的顺序是什么?- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. ; dispatch_async(dispatch_get_global_queue(0, 0), ^{ NSLog(@"A"); [self performSelec
2020-06-02 22:13:35
253
原创 iOS 中 OpenGL ES的两种创建方式GLKit和CAEAGLLayer的区别
OpenGL ES是一套多功能开放标准的用于嵌入系统的C-based的图形库,用于2D和3D数据的可视化。OpenGL被设计用来转换一组图形调用功能到底层图形硬件(GPU),由GPU执行图形命令,用来实现复杂的图形操作和运算,从而能够高性能、高帧率利用GPU提供的2D和3D绘制能力。OpenGL ES规范本身不定义绘制表面和绘制窗口,因此ios为了使用它必须提供和创建一个OpenGLES 的呈...
2019-12-06 22:26:15
1354
原创 Androoid 视频、图像采集时相机预览时的效率改善问题
曾经试图在GPUImage这个工程基础之上来开发一个项目,由于这个开源工程很知名,start非常多,就毫不犹豫地将这个工程拿来用了。谁知功能完成进入测试阶段之后,才暴露出各种问题和坑点。 第一个坑点是当一个渲染管道叠加了两个以上的滤镜的时候,稍微低端一点的手机已经在相机预览的时候已经卡得不行了。第二个坑点是,录制的过程中会概率性的包EGL_BAG_SURFACE错误,然后预览...
2017-12-29 23:11:18
714
原创 Android 短视频采集之视频断点拍摄、回删功能的实现方法总结
本文介绍了实现类似美拍、秒拍的段短视频断点录制功能的两种方案,并给出了其优劣比较。
2017-12-27 11:59:25
2723
原创 Android 音视频编辑经验总结及开源工程分享
提到音视频编辑方案,大家最容易搜到的可能是ffmpeg这个牛X的开源方案。ffmpeg 是基于C语言的著名视频编解码方案。国内有也有不少的公司将ffmpeg 移植到iOS和android 平台进行视频处理,例如,美拍、秒拍等。但是其实iOS和Android自带的多媒体框架一点也不比ffmpeg弱。下面就中常遇到的问题谈一谈在安卓视频编辑上面的经验分享。一.做Android视频编辑...
2017-11-03 16:38:54
7490
1
原创 基于android MediaCodec 的音视频播放器原理
大多数情况下,安卓原生的播放器已经能满足需求。但是,当你需要倍速、慢速播放,播放时预览滤镜效果的时候,原生播放器就难以满足需求了。Andriod 的MedaCodec框架,基于StageFright开源编解码库,支持原生硬解,不必添加so文件。首先通过MediaExtractor将视频文件中的视频轨数据分别抽取出来,视频轨道数据送人MediaCodec的视频解码器,音频数据送入音频解码器,
2017-10-30 13:21:00
1450
visual studio 2015 官方没有提供http库
2017-06-17
TA创建的收藏夹 TA关注的收藏夹
TA关注的人