|
二进制、十进制、位、字和字节 电脑的基础是二进制,那么,什么是二进制呢,为什么需要二进制呢?在早期设计的机械计算装置中,使用的不是二进制,而是十进制或者其他进制,利用齿轮的不同位置表示不同的数值,这种计算装置可能更加接近人类的思想方式。比如说一个计算设备有十个齿轮,它们级连起来,每一个齿轮有十格,小齿轮转一圈大齿轮走一格。这就是一个简单的十位十进制的数据表示设备了,可以表示0到999999999的数字。 配合其他的一些机械设备,这样一个简单的基于齿轮的装置就可以实现简单的十进制加减法了。这种通过不同的位置上面不同的符号表示数值的方法就是进制表示方法。常用的进制主要是十进制(因为我们有十个手指,所以十进制是比较合理的选择,用手指可以表示十个数字,0的概念直到很久以后才出现,所以是1-10而不是0-9)。 电子计算机出现以后,使用电子管来表示十种状态过于复杂,所以所有的电子计算机中只有两种基本的状态,开和关。也就是说,电子管的两种状态决定了以电子管为基础的电子计算机采用二进制来表示数字和数据。 常用的进制还有8进制和16进制,在电脑科学中,经常会用到16进制,而十进制的使用非常少,这是因为16进制和二进制有天然的联系:4个二进制位可以表示从0到15的数字,这刚好是1个16进制位可以表示的数据,也就是说,将二进制转换成16进制只要每4位进行转换就可以了。二进制的“00101000”直接可以转换成16进制的“38”。 一个字是电脑中的基本存储单元,根据计算机字长的不同,字具有不同的位数,现代电脑的字长一般是32位的,也就是说,一个字的位数是32。字节是8位的数据单元,一个字节可以表示0-255的数据。对于32位字长的现代电脑,一个字等于4个字节,对于早期的16位的电脑,一个字等于2个字节。
语言、汇编语言、高级语言和其他
电脑能理解的东西只有二进制的序列,在这里我们要熟悉一下一些最基本的概念了。什么是语言,语言是一种表达的形式,语言是有结构的,比如说主语、谓语等,语言还是有意义的,语言是对事物或者某种行为的描述。语言的存在有一个最基本的条件,就是需要有两个交流的主体,在我们日常的交流中,是说话的双方,或者书的作者和读者(就是我和你),在计算机的世界中,就是程序员和计算机。 根据说话的双方和所说的东西,我们可以将计算机语言分成下面几大类:
l 机器语言: 使用这种语言说话的双方是计算机和史前的程序员,在这里史前程序员直接告诉计算机把什么数据放到什么地方,进行什么样的计算等等,这种语言说出来的话就是一串串的二进制数,比如说: “00 E9 B3 00”的意思就是 “把寄存器CL的内容加上寄存器CH的内容,结果放到CL中,在寄存器BL中放入0”
l 汇编语言: 和机器语言没有什么本质的区别,唯一不同的是,程序员不用直接说出二进制的数字了,他可以使用一些简单的英文单词或者缩写来表示自己的意思。比如说刚才的机器语言片段,用汇编语言来说就是下面这个样子: “ADD CL,CH” “MOV BL,00” 由于计算机能够理解的只有二进制数字,所以在程序员使用的汇编语言和计算机使用的二进制机器语言之间需要翻译(程序),我们把汇编语言翻译成机器语言的程序叫做汇编程序,把机器语言翻译成汇编语言的程序叫做反汇编程序。
l 高级语言: 使用机器语言或者汇编语言写程序是一件非常非常困难的事情,如果没有高级语言的出现,现在我们绝对不会有多姿多彩的因特网,也不会有VCD、DVD等数字化的娱乐的出现,实际上,如果没有逻辑性更强,更接近人类思维习惯的高级语言出现,使用穿孔纸带和直接针对寄存器的操作指令,编写长达几百万行仍然可以正常运行的程序是不可想象的。 所谓的高级语言,是在汇编语言(机器语言)和人类所使用的自然语言之间的一种折衷,可以叫做严格(受限)自然语言,通过抽象出变量、语句以及随后出现的结构、对象的概念,可以让程序员用接近正常思维的方式来表示现实世界的逻辑和流程。 高级语言的代表有早期的FORTRAN(公式翻译语言)、COBOL(商用计算机语言),中期的C、PL/1、PASCAL、BASIC和比较新的JAVA、C++、ADA等。 高级语言和机器语言之间同样需要翻译,我们把高级语言翻译到机器语言的程序叫做编译器,而进行反向翻译的程序非常难以编写,需要进行这种翻译的时候一般都是人工通过经验进行的,我们把这种反向的翻译称为“逆向工程”。 高级语言的表达能力和机器语言是完全一样的(语言的表达能力,是指某种语言能否完整的描述某个事物或者某种行为,比如说,一种语言如果没有相对时间的概念,没有词汇可以表示“先”、“后”,那么,这种语言就不具有表达下面这个行动的能力:“先把鸡蛋放在碗里,然后再把盐放进去”)。科学家已经从理论上证明,一种语言只要有存储、判断、跳转等几个最基本的功能,就可以表达出所有现有的电脑上可能有的机器语言所能够表达的事物和行为。 所以使用高级语言并不会使计算机的功能下降,唯一损失的可能就是速度和效率了,但是在计算机速度越来越快、资源越来越丰富的今天,和高级语言带来的可理解性和强大的表达能力相比,这点损失是微不足道的。
l 因特网语言、脚本语言 这些语言实际上都是属于高级语言,但是鉴于他们在因特网时代的重要地位,在这里单独对他们进行描述,所谓的因特网语言,包括JAVA Script,VBScript、ASP、PHP等,这些语言基本上都是脚本语言。 他们设计出来主要是供因特网应用程序使用的,可以对网页、浏览器、服务器的页面进行操作,语法比较简单,基本上是解释执行的,不需要编译成二进制代码。功能受到限制,但是开发简单方便。
程序、代码、可执行文件
当你接触到电脑世界的时候,除了碰到计算机(也就是电脑以外),另外一个最常见的名词肯定是程序、代码或者可执行文件之类。其实这些名词指的都是同一个东西,就是可以运行的一块代码,那么什么是代码?什么是可执行的代码呢? 看到这本书的时候,中国队已经进入了世界杯,我们就来凑一下热闹,以足球运动员为例吧。假设有一个天才的足球运动员,他有很多天才的技能,比如说向前带球、向左带球、传球、射门等等,但是唯一的缺点是,这个运动员没有大脑,不知道在球场上该做什么。这个运动员很像一台无所不能但是没有装入任何程序的电脑。现在我们告诉这个运动员一些简单的规则: 1. 拿到球直接向前带球。 2. 如果发现正面有一个人拦截,就过掉他。 3. 如果发现有两个人拦截,寻找左边的接应队员,如果找到传给左边。否则寻找右边的接应队员,找到后传给右边。如果都没找到,尝试过掉两个人。 4. 如果发现有三个人拦截,把球向后传。 5. 如果和球门之间的距离小于10米,并且和球门之间少于两个防守队员则射门。 6. 如果… 这些规则的全部就是一个踢球者程序,告诉一个忠实的执行者—天才足球运动员(计算机)在什么情况下该做什么。程序是由代码组成的,代码就是一条一条的指令,指令就是告诉运动员(计算机)做什么,什么情况下做什么。 在电脑上,程序总是表示成文件的形式,实际上,电脑上的任何东西都表示成一个文件。一个文件,如果本身是一个程序,我们就称它为可执行文件,意思就是这个文件包括了很多指令,可以告诉电脑应该做什么。可执行文件一般是二进制的机器代码,但是随着操作系统的进步,可执行文件的范围越来越宽,很多批处理、脚本和其他解释语言的指令集合也可以看成是可执行文件,比如VBS文件等。
双击的陷阱
大家都已经非常熟悉的视窗环境,引入了(对不起,如果我没有记错的话,应该是苹果机首先引入了了程序关联的概念,视窗操作系统“借鉴”了这样一个概念,实际上鼠标、图标桌面等等名词都是来自一个非常著名的实验室,施乐的PARC实验室,最早出现在个人电脑上的图形界面、鼠标和应用程序关联,应该是苹果公司的麦金塔上的操作系统)。 随着视窗环境的流行,可执行文件的意义也扩展了,我们认为“凡是能够双击打开的都可以认为是可执行文件”,这种可执行文件的观念,扩展到很多脚本语言的程序,比如说VBS等,更加严重的是,甚至以.txt为后缀名的文件也能起到可执行文件的作用,也就是说可以做到双击之后打开之后不是简单的文本,而是功能强大的脚本语言,可以执行任何危险的操作! 感谢媒体的大力宣传,现在任何用户在收到带有附件的电子邮件的时候,在打开可执行文件之前都会三思而后行。但是病毒或者恶意代码的制造者是专家而您不是,所以他们有无数的新把戏可玩。一个最简单的办法就是让您以为那些附件只不过是没有危险的文本文件或是图像文件等。由于目前大多数人使用的是windows操作系统,windows的默认设置是隐藏已知文件扩展名的,而当你去点击那个看上去很友善的文件,那些破坏性的东西就跳出来了。您可能说这我早就知道了,那么下面讲述的.txt文件的新欺骗方法及原理您知道吗? 假如您收到的邮件附件中有一个看起来是这样的文件:QQ靓号放送.txt,您是不是认为它肯定是纯文本文件?我要告诉您,不一定!它的实际文件名可以是QQ靓号放送.txt.{3050F4D8-98B5-11CF-BB82-00AA00BDCE0B}。 {3050F4D8-98B5-11CF-BB82-00AA00BDCE0B}在注册表里是HTML文件关联的意思。但是存成文件名的时候它并不会显现出来,您看到的就是个.txt文件,这个文件实际上等同于QQ靓号放送.txt.html。那么直接打开这个文件为什么有危险呢? 您可能以为它会调用记事本来运行,可是如果您双击它,结果它却调用了HTML来运行,并且自动在后台开始格式化d盘,同时显示“Windows is configuring the system。Plase do not interrupt this process。”这样一个对话框来欺骗您。您看随意打开附件中的.txt的危险够大了吧? 欺骗实现原理:当您双击这个伪装起来的.txt时候,由于真正文件扩展名是.{3050F4D8-98B5-11CF-BB82-00AA00BDCE0B},也就是.html文件,于是就会以html文件的形式运行,这是它能运行起来的先决条件。 文件内容中的第2和第3行是它能够产生破坏作用的关键所在。其中第3行是破坏行动的执行者,在其中可以加载带有破坏性质的命令。那么第2行又是干什么的呢?您可能已经注意到了第2行里的“WSCript”,对!就是它导演了全幕,它是实际行动总指挥。 WScript全称Windows Scripting Host,它是Win98新加进的功能, 是一种批次语言/自动执行工具——它所对应的程序“WScript.exe”是一个脚本语言解释器,位于c:\WINDOWS下,正是它使得脚本可以被执行,就象执行批处理一样。在Windows Scripting Host脚本环境里,预定义了一些对象,通过它自带的几个内置对象,可以实现获取环境变量、创建快捷方式、加载程序、读写注册表等功能。 下面我们通过一个小例子来说明Windows Scripting Host功能是如何的强大,使用又是怎样的简单,被有心人利用后的威胁有多大。例如有内容如下的*.vbs文件: Set so=CreateObject( Scripting.FileSystemObject ) so.GetFile(c:\windows\winipcfg.exe).Copy( e:\winipcfg.exe ) 就是这么两行就可以拷贝文件到指定地点。第一行是创建一个文件系统对象,第二行前面是打开这个脚本文件,c:\windows\winipcfg.exe指明是这个程序本身,是一个完整的路径文件名。GetFile函数获得这个文件,Copy函数将这个文件复制到e盘根目录下。这也是大多数利用VBscript编写的病毒的一个特点。从这里可以看出,禁止了FileSystemObject这个对象就可以很有效的控制这种病毒的传播。用regsvr32 scrrun.dll /u这条命令就可以禁止文件系统对象。 欺骗识别及防范方法:这种带有欺骗性质的.txt文件显示出来的并不是文本文件的图标,它显示的是未定义文件类型的标志,这是区分它与正常.txt文件的最好方法。识别的另一个办法是在“按WEB页方式”查看时在“我的电脑”左面会显示出其文件名全称,此时可以看到它不是真正的txt文件。问题是很多初学者经验不够,老手也可能因为没留意而打开它,在这里再次提醒您,注意您收到的邮件中附件的文件名,不仅要看显示出来的扩展名,还要注意其实际显示的图标是什么。对于附件中别人发来的看起来是.txt的文件,可以将它下载后用鼠标右键选择“用记事本打开”,这样看会很安全。 好了,现在您知道.txt文件也不能轻易打开了吧?
|