自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

rv0p111

学习的脚步

  • 博客(48)
  • 收藏
  • 关注

原创 OpenGL ES 知识点记录(一)

简单介绍OpenGL ES 其实是访问类似于iPhone或者是iPad的现代嵌入式系统的3D图像加速硬件的标准。把程序提供的几何数据转换为屏幕上的图像的过程叫做渲染。OpenGL ES 3D的默认坐标系、顶点和矢量为集合数据的描述提供了数学基础。OpenGL ES使用顶点数据来定义点、线段和三角形,OpenGL ES只渲染顶点、线段和三角形。目前图像处理器其实就是大规模的并行矢量处理器...

2018-04-30 07:59:35 216

原创 用or和and指令转换大写字母和小写字母

用or和and指令转换大写字母和小写字母我们如果去观察A、B、C、D、E、F和a、b、c、d、e、f 这些字母的二进制表示形式为A:01000001 a:01100001 B:01000010 b:01100010 C:01000011 c:01100011 D:01000100 d:01100100 E:01000101 ...

2018-04-29 19:06:23 2116

原创 x86架构下的函数参数

x86架构下的函数参数 这里就拿x86-64架构下来举例子,在这个架构下分别用rdi,rsi,rdx,rcx,r8,r9作为第1-6个参数。rax作为返回值当我们去调用函数的时候long test(long a,long b,long c){ return a+b+c;}long sum(long a,long b,long c,long d,long e,lo...

2018-04-29 14:35:28 711

原创 x86架构下的函数汇编

关于x86架构下的函数汇编调用了下面的函数int sum(int a,int b){ int c = 3; int d = 4; sum(1,2); return a+b+c+d;}int main(int argc, const char * argv[]) { @autoreleasepool { sum(1,2)...

2018-04-29 08:11:59 848

原创 编译链接两个.c文件然后执行

关于clang的编译链接首先我们可以先去准备两个.c文件 test.c文件内容如下所示#include <stdio.h>void test1();int main(){ printf("Hello World!"); test1(); return 0;} test1.c文件内容如下所示void test1()...

2018-04-28 14:58:14 3023

原创 关于指针的汇编代码的分析

关于指针的汇编代码的分析 在这里就做个最简单的分析,根据汇编代码,看指针是怎么工作的比如说我们写了下面的代码void func (){ int* a; int b = 10; a = &b;}查看生成的汇编代码 关于栈空间的描述 看到在内存中存储的位置,内存的读写都是往高地址走的,int *a是局部变量,所以也要放在栈当中...

2018-04-28 10:37:42 1336

原创 关于Xcode下的汇编指令的优化

关于Xcode下的汇编指令的优化 Xcode默认情况下在release模式下就会进行优化,而在debug模式下默认是不会优化的编译器优化的等级的设置,Debug下是没有优化的,也就是说我写什么代码就生成什么样的汇编指令 优化等级五种 当我们选择优化等级为最后一个的时候,写了下面的函数int main(int argc, char * argv[]) { i...

2018-04-27 09:46:51 761

原创 实现用户登录方式

实现用户登录方式 其实实现用户登录的方式由很多种,但是其实不管哪种登录方式,目的都是安全!下面就简单的介绍下几种方式1、直接通过表单的形式,post请求过去,过程如下所示 2、一样通过表单的形式提交,但是密码用MD5进行加密,然后进行传输,这样会更加的安全 3、还是表单形式提交,不过在对密码MD5加密前先去拼接一个字符串,然后再进行MD5加密 4、第三方登录-oAu...

2018-04-26 14:03:33 4320 1

原创 关于Web存储技术

关于Web存储技术 在HTML4中,浏览器的主要功能是负责呈现HTML的内容,当客户端需要存储少量数据的时候,是只能使用Cookie技术来实现的Cookie技术的缺点Cookie的大小会被限制在4KB以内Cookie会随着HTTP请求一起向服务器去发送,重复多次发送就会导致带宽的浪费,也就是说如果我去浏览了一张网页,请求到了Cookie,然后点击下一页的时候,再返回上一页C...

2018-04-26 13:13:18 480

原创 关于bx和loop的汇编习题

1、向内存0:200~0:23F依次传送数据0~63(3FH),用汇编语言写出来assume cs:codecode segment mov ax,0020h mov ds,ax mov bx,0 mov cx,64 mov dx,0s: mov [bx],dx inc bx inc dx loop s ...

2018-04-25 14:40:34 324

原创 操作系统的shell

简单介绍 操作系统其实是由多个功能模块组成的庞大、复杂的软件系统。在任何通用的操作系统中都需要去提供一个叫shell(外壳)的程序,我们就可以使用这个程序来操作计算机系统进行工作,其实我们所使用的可以在终端中输入命令,其实就是由命令行解释器进行解释运行的在DOS中有一个程序叫做command.com,这个程序在DOS中被称为命令解释器,也就是DOS系统的shell。DOS启动的时...

2018-04-25 13:56:30 3049

原创 关于adrp指令

adrp指令的浅析首先我们去写一个函数int fun(int a,int b){ //haha是printf函数的参数 printf("haha"); int c= a + g; return c;}然后去调用fun(1,2);我们可以看到在main函数中传入了参数,1 和 2,先保存在w8和w9中,然后再把w0和w1保存到栈...

2018-04-25 07:19:12 6549 1

原创 创建汇编文件进行编译链接

创建汇编文件进行编译链接首先我们要先去创建一个.asm文件,也就是汇编的源程序文件然后用微软的masm5.0汇编编译器进行对源程序的编译 下面就是去执行masm程序,然后对1.asm文件进行编译,其中.lst文件和.crf文件就是编译器将源程序编译为目标文件过程中产生的中间结果 关于1.crf文件的内容 再来看下.lst文件中的内容,我们可以...

2018-04-23 19:29:34 779

原创 OpenGL-缓冲区对象

关于缓冲区对象 其实关于缓冲区对象的这个概念其实很广,比如说有帧缓冲区、有顶点缓冲区、像素缓冲区、纹理缓冲区等等。缓冲区对象是保存在GPU内存中的,我们能够去高效的访问它,在OpenGL有缓冲区对象之前,应用程序只有有限的选择可以在GPU当中去存储数据,以及在GPU中更新数据常常是需要去重新加载整个对象的,在系统内存和GPU内存之间来回移动数据可能是一个极其缓慢的过程创建缓冲区其实非...

2018-04-23 14:38:23 808

原创 关于自动释放池的底层实现

关于自动释放池实现机制当我们去使用自动释放池的时候一般都是这样使用的int main(int argc, char * argv[]) { @autoreleasepool { }}我们使用clang-rewrite-objc 文件名 将其改变为C++代码,我们就会发现代码变成了这样 下面通过extern关键字引入了两个函数objc_autoreleas...

2018-04-22 23:12:39 685

原创 OpenGL-纹理数组

关于纹理数组 我们可以通过不同的纹理单元去一次性的去访问几个纹理,也就是说着色器可以一次性访问多个纹理对象,实际上还有中方法也能达到这种效果,就是使用纹理数组,也就是说我们可以将几个2D图像都去加载到一个单独的纹理对象中,其实Mip贴图中每个Mip层次都是一个不同的图像以及立方体贴图中立方体的每个面都有它们自己的图像也都是在一个纹理中添加多个图像的体现对于纹理贴图,我们可以将整个数组...

2018-04-22 08:31:11 4018 4

原创 关于enumerateObjectsUsingBlock方法的autorelease

具体实现enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop)这个数组枚举方法,之前就一直在说它里面内置了一个自动释放池,最近在学习的时候,才真正的体会到,看其内部的调用其内部做了自动释放池的Push和Pop操作...

2018-04-21 23:23:22 902

原创 关于函数参数的存储

关于函数参数的存储我们可以自己去写一个函数然后去观看其的存储方式,我这里写的就是一个a+b的函数,然后在main函数中去调用int sum(int a,int b){ return a+b;}int main(int argc, char * argv[]) { @autoreleasepool { sum(10,20);}跳进去看汇编代码...

2018-04-21 20:11:58 2198

原创 观察Xcode下系统调用函数生成汇编指令

一、简单介绍原本之前用简单的汇编指令写了一个函数,不过发现进入死循环了,这是为什么呢?首先先看看之前写的汇编代码吧,下面的.text的意思就是告诉编译器,我这个在内存中是一个代码段,.global的意思就是全局函数的意思.text.global _C,_D_C: mov x0, #0xaaaa0000 bl _D mov x0,#0xcccc0000 ...

2018-04-21 15:44:59 1405 2

原创 关于ARM64架构下的bl和ret指令

关于bl和ret指令的作用 自己也在摸索学习的过程中,就简单的介绍下它们两个的作用吧,其实bl指令就是会将下一条指令的地址放入lr(x30)寄存器,以及跳转到后面的地址处。具体过程如下所示 我们去关注下lr寄存器 进入sum函数,lr寄存器的值就改变了 当要去执行ret指令 成功跳转出来 为了去验证ret指令返回的就是地址就是根据lr寄存器来的,做以下的...

2018-04-21 13:39:29 10430 2

原创 关于CPU寄存器和高速缓存的简单介绍

关于CPU寄存器的简单介绍最近浅显的学习了下这方面的知识,所以目前也想去总结一下 CPU除了控制器、运算器等器件还有一个重要的部件就是寄存器。其中寄存器的作用就是进行数据的临时存储。CPU的运算速度是非常快的,为了性能CPU在内部开辟一小块临时存储区域,并在进行运算时先将数据从内存复制到这一小块临时存储区域中,运算时就在这一小快临时存储区域内进行。我们称这一小块临时存储区域为寄存...

2018-04-21 09:44:29 7472

原创 OpenGL 点精灵效果

点精灵效果简介点精灵其实是OpenGL 1.5及之后的版本所支持的一个特性,通过点精灵这个特性,我们可以通过绘制1个3D点,去将一个2D纹理图像显示在屏幕的任意位置。所以我们可以用点去表示屏幕上移动的大量的粒子,来产生一些视觉效果。把这些点表示为重叠2D图像是可以做成动画细丝的效果的。其实OpenGL一直都是支持对点进行纹理贴图的,但是在1.5版本之前,这意味着只是将单个纹理坐标应用于整个点。...

2018-04-20 07:51:58 2548

原创 do-while、for循环、while的实现思路

关于循环的实现思路其实最近也学习了下汇编,不过还是从8086开始学起,感觉这个还是比较容易上手的,然后学到loop指令,忽然发现这个指令不就是拿来实现循环的吗。然后进行了些许测试。在这里有总结下,这里是借助了一个工具来进行实现的。先看看这个指令的用法吧 这里cx表示的是8086CPU里面的一个寄存器。loop指令和cx寄存器结合使用就可以达到循环的效果mov cx,循环次...

2018-04-19 23:08:49 284

原创 验证码的实现思路

验证码的实现思路流程最近学习了下这方面的内容,就简单的理一下思路,这里就拿12306的图片验证码举例子其实大致的实现思路可以是这样子的去数据库随机抽取八张图片数据存入session,关于session的解释session 是一个抽象概念,由于HTTP协议是无状态的协议,所以服务端需要记录用户的状态时,就需要用某种机制来识具体的用户,这个机制就是session生成验证图形,客户端进行对...

2018-04-19 11:47:05 1248

原创 信号量和GCD中的dispatch_semaphore

一、信号量简单介绍最近学习了下操作系统中的信号量的概念,忽然发现和GCD中的信号量的概念几乎一样,估计GCD的dispatch_semaphore也是根据此封装的,在这里就简单的介绍下它的概念。 信号量是由荷兰科学家E.W.Dijkstra在1965年提出的要求信号量是一个整数,除了初始化之外,它就只能去通过wait和signal去访问,这其实和我们在ios中的dispatch_sem...

2018-04-18 15:49:57 255

原创 关于App签名的步骤

前景介绍之前有自己去做过上架,也去了解了下这方面的知识,最近也继续的去了解了一下,这边也想自己总结下。我们如果要上架肯定是少不了证书的签名的,我们配置证书也是要在苹果官网来进行的,一般的步骤是这样子的具体分析先去keychain中去选择从证书颁发机构去请求证书,这样的话就会在本地生成了一个公钥,一个私钥,在CertificateSigningRequest.certSigni...

2018-04-17 23:38:46 2557

原创 安装cycript遇到的问题

cycript的安装讲道理今天真的是安装了很久现在终于好了,真的是一路坎坷。下面就简单的介绍下它的安装流程吧。不过在介绍之前先简单的说下它是什么,cyscript就相当于是混合了OC,javaScript等等语法的解释器,我们可以用它来动态修改和调试 Mac和ios的app。1、下载,直接去官网下载就可以了:cycript 2、解压安装,我个人是把安装的文件夹放在了opt文件中,大家可...

2018-04-17 18:16:31 1080

原创 如何修改iTerm2中的用户名

一、简单介绍最近开始使用了iterm2这个工具感觉还不错,这边把遇到的一个问题讲一下,就是如果在iTerm2终端中用户名显示太长我们应该怎么去修改由于oh_my_zsh经常会有版本更新,为了避免我们修改的跟更新的版本有冲突,如果说我们想用的主题是agnoster.zsh-theme,我们应该将其拷贝出来,然后命名为自己想要命名的名字,比如叫做czxagnoster.zsh-theme,然后...

2018-04-16 23:05:23 7394

原创 汇编的简单介绍

关于汇编、存储器、CPU的基本介绍1、汇编指令其实就是机器指令的助记符,和机器指令是一一对应的。2、每一种CPU其实都有自己的汇编指令集,因为如果CPU架构不同的话,其实对应的机器指令也是不一样的,而机器指令又是和汇编指令是一一对应的,所以每一种CPU才会有自己的汇编指令集。3、CPU可以直接使用的信息在存储器进行存放,而存储器又分为RAM和ROM,RAM是可读可写的,而ROM则只是可...

2018-04-16 18:59:45 370

原创 OpenGL中的Use of undeclared identifier 'gl_PointCoord'

关于这个问题,其实解决方法很简单,我们只需要在着色器程序中加入一行代码就可以解决 #version 120原因是这样子的因为gl_PointCoord是在着色器版本为1.2的版本的时候引入的,具体原因可以参考这个讨论下面是我们原本的程序,执行的时候会报Use of undeclared identifier ‘gl_PointCoord’varying vec4 vStarC...

2018-04-16 12:24:18 2210

原创 编译的那些事

一、简单介绍首先我们先了解下什么是编译,编译其实简单来说就是把我们写的高级代码,翻译成另一种语言(称为目标代码)。而编译是由编译程序来做的,很多计算机都配有不止一种高级语言的编译程序,编译程序又可以理解为语言翻译程序。编译程序的好处 有了编译程序的存在可以使得程序员不必去考虑与机器有关的琐碎的细节,这对于当今机器的数量和种类持续不断地增长的年代是很重要的,如果没有编译程序,我们就需...

2018-04-15 20:40:26 481

原创 进程间通信

一、简单介绍操作系统内并发执行的进程可以是独立的进程也可以是协作的进程。如果一个进程不能影响其他进程或者被其他进程所影响,那么这个进程就是独立的。很明显,不与任何其他进程共享数据的进程就是独立的。如果说系统中一个进程能影响其他进程或者被其他进程所影响,那么该进程就是协作的,与其他进程共享数据的进程称为协作进程。协作进程需要一种进程间的通信机制(interprocess communic...

2018-04-15 10:02:58 331

原创 虚拟机简介

一、虚拟机概念虚拟机(Virtual Machine)指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统,虚拟机的基本思想是单个计算机(CPU、内存、磁盘、网卡等)的硬件抽象为几个不同的执行部件,所以会给人一种感觉每个独立的执行环境都在自己的计算机上面运行一样。其实目前的一些虚拟机软件就是将物理硬件抽象为独立的然后给虚拟机运行。每个虚拟机都有其自己的虚拟CPU、内存、...

2018-04-14 11:49:52 3858

原创 操作系统双重模式和中断机制和定时器概念

一、陷阱中断还是想记录下这方面的知识吧,所以想来也写写。现代的操作系统其实都是由中断驱动的,中断其实本质上就是一种电信号,当有某些事件发生之后就会去产生中断,然后中断控制器进行接收,它可以接收多个外部中断源的中断请求,并进行优先级判断,选中当前优先级最高的中断请求,并将此请求送到CPU的INTR端。当CPU响应中断并进入中断服务程序的处理过程后,中断控制器仍负责对外部中断请求的管理。在我们的计算机...

2018-04-14 10:13:38 2852

原创 NSMutableArray的扩容机制

一、简单介绍其实NSMutableArray的扩容的话应该就是在于如果其容量不够了,就会去重新malloc一块新的区域,然后会复制旧的数据到新的区域,之后把旧的空间给free掉。下面我们就先去查看下NSMutableArray的对象的内存信息以及下面的那个就是指向第一个数据的指针的地址信息,所以下面我们再去读取从它开始的100个字节的内存信息上面的0x01000020b0其实就是Milk字符串的地...

2018-04-14 08:52:10 2446

原创 C语言实现数组结合NSArray分析

一、简单分析最近学习了下这方面的知识,所以这边就进行总结分析下,其实在ios中的NSArray其实就是一个结构体,而我们所谓的NSArray * array的这个array对象其实就是一个结构体指针,在下面经过编译之后的文件中其实就可以看出来了。所以我们可以自己去设置结构体去写一个,这里我们采用的时候线性表的顺序存储结构二、具体实践接下来我们就自己可以去模仿下NSArray去自己去创建一个数组,首...

2018-04-13 23:10:37 926

原创 通过修改内存,直接修改NSArray的count属性

一、简单介绍最近学习了一波,想记录下....我们都知道NSArray有一个属性@property (readonly) NSUInteger count;是只读属性,但其实我们可以操纵内存直接进行修改。 我们通过打印下面的值,得到的count的值为4 ,那么我们该怎么去修改它呢?下面会有介绍 NSString * str = @"哈哈"; NSArr...

2018-04-13 21:29:14 910

原创 C语言结构体方法的定义

一、简单介绍一般来说我们如果要在函数中去创建一个结构体的话,返回值一般都是返回一个指针,因为如果我们返回的是一个结构体的话,会消耗内存,因为在函数里面的内部创建的结构体,然后外面声明一个变量赋值给它,其实是做了一个拷贝操作,这样的话如果结构体有很多属性,就会消耗很多的内存,所以我们一般是把指向结构体的指针传递出去。下面都是在栈区开辟的空间,所创建的变量。所以是会存在问题的,因为是在子函数栈里面创建...

2018-04-12 23:44:08 2042

原创 加速网站静态资源访问的方法

一、采用CDN借助一张图来说明下,其实CDN的概念大致可以理解为在每个地区建立一个网络中心,这样做的好处就是用户访问速度加快了,不然的话就比如说你只有一台服务器在北京,而我要在全国各地去访问,这样的话信道传输速度肯定会变慢,所以为了使内容传输的更快、更稳定。可以通过在网络各处放置节点服务器的方法来加快资源访问。目前阿里云、腾讯云的CDN服务可以帮我们去搞定这些事情,他们在全球各地都会有这种网络中心...

2018-04-12 13:00:01 2755

原创 Masonry中的mas_makeConstraints方法

一、简单介绍我们一般来说会这样进行使用 [view mas_makeConstraints:^(MASConstraintMaker *make) { //这个使用的就是MASCompositeConstraint类型的 make.left.top.width.height.mas_equalTo(100).multipliedBy(1); /...

2018-04-12 10:10:54 10358

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除