这是我参与「第五届青训营 」伴学笔记创作活动的第 13 天
今天学一些计算机基础知识。
1.计算机的性能指标
计算机的主要性能指标是字长、主频、内存容量、存取周期、运算速度
计算机的性能指标是指能在一定程度上衡量计算机优劣的技术指标
- 字长。计算机在同一时间内处理的一组二进制数称为一个计算机的“字”,而这组二进制数的位数就是“字长”。
- 主频。就是CPU的时钟频率,简单说是CPU运算时的工作频率(1秒内发生的同步脉冲数)的简称。
- 内存容量。内存储器容量的大小反映了计算机即时存储信息的能力。
- 存取周期。存贮器连续二次独立的“读”或“写”操作所需的最短时间,单位来纳秒(ns,1ns=10-9s)。
- 运算速度。运算速度是衡量计算机性能的一项重要指标。通常所说的计算机运算速度(平均运算速度),是指每秒钟所能执行的指令条数,一般用“百万条指令/秒”。
2.常见的编码识别与转换
-
ASCII编码
标准ASCII 码也叫基础ASCII码,使用7 位二进制数(剩下的1位二进制为0)来表示所有的大写和小写字母,数字0 到9、标点符号,以及在美式英语中使用的特殊控制字符
-
Base64编码
Base64,就是使用64个可打印字符来表示二进制数据的方法。这64个字符中包括大小写字母、数字、+和/,还有用来补缺的特殊字符=。
-
shellcode编码
- shellcode是一段用于利用软件漏洞而执行的代码,shellcode为16进制之机械码,以其经常让攻击者获得shell而得名。shellcode常常使用机器语言编写。 在寄存器eip溢出后,加入一段可让CPU执行的shellcode机械码,让电脑可以执行攻击者的任意指令。在Shellcode的编码技术中有众多的编码算法,常用的有如下几种:
- Base64编码:采用Base64对网页Shellcode进行编码。
- alpha_upper编码:编码后的整个Shellcode呈现ASCII可见字符编码。
- xor编码:通过异或算法实现编码,编解码过程比较容易实现,编码后的长度增长也比较容易接受。
- shellcode是一段用于利用软件漏洞而执行的代码,shellcode为16进制之机械码,以其经常让攻击者获得shell而得名。shellcode常常使用机器语言编写。 在寄存器eip溢出后,加入一段可让CPU执行的shellcode机械码,让电脑可以执行攻击者的任意指令。在Shellcode的编码技术中有众多的编码算法,常用的有如下几种:
-
Quoted-printable编码
- Quoted-Printable编码的基本方法是:输入数据在33-60、62-126范围内的,直接输出;其它的需编码为“=”加两个字节的HEX码(大写)。为保证输出行不超过规定长度,可在行尾加“=\r\n”序列作为软回车。
-
XXencode编码
- 将输入文本以每三个字节为单位进行编码
- 如果最后剩下的资料少于三个字节,不够的部份用0补齐
- 这三个字节共有24个Bit,以6bit为单位分为4个组,每个组以十进制来表示所出现的数值只会落在0到63之间
- 以所对应值的位置字符代替。它所选择的可打印字符是:
+-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz,一共64个字符 - 跟base64打印字符相比,就是UUencode多一个
-”字符,少一个/字符
- UUencode编码
- 起先用在unix网络中,早期在电子邮件中使用较多
- 将输入文本以每三个字节为单位进行编码,如果最后剩下的资料少于三个字节,不够的部份用0补齐
- 三个字节共有24个Bit,以6-bit为单位分为4个组,每个组以十进制来表示所出现的字节的数值,这个数值只会落在0到63之间
- 然后将每个数加上32,所产生的结果刚好落在ASCII字符集中可打印字符(32-空白…95-底线)的范围之中
- URL编码
-
URL 编码协议规定(即 RFC3986 协议):URL 中只允许包含英文字母、数字、以及这 4 个
- _ . ~特殊字符和所有的保留字符。协议中规定了以下保留字符:! * ’ ( ) ; : @ & = + $ , / ? # [ ]
-
但是当组件中的普通数据包含这些特殊字符时,它们就变成了不安全字符,此时就需要对其进行编码处理。
- Unicode编码
- Unicode编码是一种计算机字符编码标准,UTF-8 UTF-16 UTF-32是Unicode的具体实现。UTF-8可以说是当前互联网最常用的编码格式了,它基于Unicode字符集进行编码设计。它最大的特点是变长字节的编码设计,一个字符最长4个字节,最少1个字节,大部分的中文字符占3个字节。编码规则如下:
1.用一个字节表示的字符,第一位设为 0,后面的 7 位对应这个字符的 Unicode 码点。由于这128个字符的unicode完全对照ASCII码,可以说完全向下兼容ASCII码。即ASCII编码的文件可以用UTF-8打开而不乱码;
2.用一个字节以上表示的字符,假设是N个字节表示这个字符:则该字符第一个字节的前N位都为1,第N+1位为0,剩下的N-1个字节的前两位都设为10,剩下没有主动设值的位置则使用这个字符的Unicode二进制代码点从低位到高位填充,不够用0补足。
- Escape/Uescape编码
- Escape/Unescape加密解码/编码解码,又叫%u编码,从以往经验看编码字符串出现有"u",它是unicode编码,那么Escape编码采用是那一种unicode实现形式呢。其实是UTF-16BE模式。这样一来问题非常简单了。 Escape编码/加密,就是字符对应UTF-16 16进制表示方式前面加%u。Unescape解码/解密,就是去掉"%u"后,将16进制字符还原后,由utf-16转码到自己目标字符。如:字符“中”,UTF-16BE是:“6d93”,因此Escape是“%u6d93”,反之也一样!因为目前%字符,常用作URL编码,所以%u这样编码已经逐渐被废弃了
- HTML实体编码
- HTML 实体是一段以连字号(
&)开头、以分号(;)结尾的文本(字符串)。实体常常用于显示保留字符(这些字符会被解析为 HTML 代码)和不可见的字符(如“不换行空格”)。你也可以用实体来代替其他难以用标准键盘键入的字符。
- HTML 实体是一段以连字号(
- 摩尔斯电码(Morse Code)
- 摩尔斯电码是一种早期的数字化通信形式,但是它不同于现代只使用0和1两种状态的二进制代码,它的代码包括五种:点、划、点和划之间的停顿、每个字符间短的停顿(在点和划之间)、每个词之间中等的停顿以及句子之间长的停顿。
3.进程与线程
- 本质区别:进程是操作系统资源分配的基本单位,而线程是处理器任务调度和执行的基本单位。
- 包含关系:一个进程至少有一个线程,线程是进程的一部分,所以线程也被称为轻权进程或者轻量级进程。
- 资源开销:每个进程都有独立的地址空间,进程之间的切换会有较大的开销;线程可以看做轻量级的进程,同一个进程内的线程共享进程的地址空间,每个线程都有自己独立的运行栈和程序计数器,线程之间切换的开销小。
- 影响关系:一个进程崩溃后,在保护模式下其他进程不会被影响,但是一个线程崩溃可能导致整个进程被操作系统杀掉,所以多进程要比多线程健壮。
4.内存管理
内存管理功能:
- 内存空间的分配与回收:由操作系统完成主存储器空间的分配和管理,是程序员摆脱存储分配的麻烦,提高编程效率。
- 地址转换:将逻辑地址转换成相应的物理地址。
- 内存空间的扩充:利用虚拟存储技术或自动覆盖技术,从逻辑上扩充主存。
- 存储保护:保证各道作业在各自的存储空间内运行,互不干扰。
重定位:根据内存的当前情况,将装入模块装入内存的适当位置,装入时对目标程序中的指令和数据的修改过程称为重定位。
静态重定位:地址的变换通常是在装入时一次完成的。一个作业装入内存时,必须给它分配要求的全部内存空间,若没有足够的内存,则不能装入该作业。此外,作业一旦装入内存,整个运行期间就不能在内存中移动,也不能再申请内存空间。
动态重定位:需要重定位寄存器的支持。可以将程序分配到不连续的存储区中;在程序运行之前可以只装入它的部分代码即可投入运行,然后在程序运行期间,根据需要动态申请分配内存。
覆盖和交换:覆盖与交换技术是在多道程序环境下用来扩充内存的两种方法,目的是减少程序占用的主存空间来扩充内存。 覆盖是在同一个程序或进程中的,交换是在不同进程之间的。
连续分配管理方式:连续分配方式是指为一个用户程序分配一个连续的内存空间。主要包括单一连续分配、固定分区分配和动态分区分配。
引入快表后的地址变换过程如下:
- CPU给出逻辑地址,由某个硬件算得页号、页内偏移量,将页号与快表中的所有页号进行比较。
- 如果找到匹配的页号,说明要访问的页表项在快表中有副本,则直接从中取出该页对应的内存块号,再将内存块号与页内偏移量拼接形成物理地址,最后,访问该物理地址对应的内存单元。因此,若快表命中,则访问某个逻辑地址仅需一次访存即可。
- 如果没有找到匹配的页号,则需要访问内存中的页表,找到对应页表项,得到页面存放的内存块号,再将内存块号与页内偏移量拼接形成物理地址,最后,访问该物理地址对应的内存单元。因此,若快表未命中,则访问某个逻辑地址需要两次访存(注意:在找到页表项后,应同时将其存入快表,以便后面可能的再次访问。但若快表已满,则必须按照一定的算法对旧的页表项进行替换)
虚拟内存: 基于局部性原理,在程序装入时,可以将程序中很快会用到的部分装入内存,暂时用不到的部分留在外存,就可以让程序开始执行。在程序执行过程中,当所访问的信息不在内存时,由操作系统负责将所需信息从外存调入内存,然后继续执行程序。若内存空间不够,由操作系统负责将内存中暂时用不到的信息换出到外存。在操作系统的管理下,在用户看来似乎有一个比实际内存大得多的内存,这就是虚拟内存。
虚拟存储器的最大容量由计算机的地址结构决定,实际容量 = min{内存和外存的容量之和,CPU的寻址范围}。并不是简单的内外存容量相加。