美籍匈牙利数学家冯·诺依曼于1946年提出存储程序原理,把程序自己看成数据来对待,程序和该程序处理的数据用一样的方式储存。 冯·诺依曼体系结构冯·诺依曼理论的要点是:计算机的数制采用二进制;计算机应该按照程序顺序执行。人们把冯·诺依曼的这个理论称为冯·诺依曼体系结构。
程序员
(1)采用存储程序方式,指令和数据不加区别混合存储在同一个存储器中,数据和程序在内存中是没有区别的,它们都是内存中的数据,当EIP指针指向哪 CPU就加载那段内存中的数据,若是是不正确的指令格式,CPU就会发生错误中断. 在如今CPU的保护模式中,每一个内存段都有其描述符,这个描述符记录着这个内存段的访问权限(可读,可写,可执行).这就变相的指定了哪些内存中存储的是指令哪些是数据)指令和数据均可以送到运算器进行运算,即由指令组成的程序是能够修改的。
(2)存储器是按地址访问的线性编址的一维结构,每一个单元的位数是固定的。
(3)指令由操做码和地址组成。操做码指明本指令的操做类型,地址码指明操做数和地址。操做数自己无数据类型的标志,它的数据类型由操做码肯定。
(4)经过执行指令直接发出控制信号控制计算机的操做。指令在存储器中按其执行顺序存放,由指令计数器指明要执行的指令所在的单元地址。指令计数器只有一个,通常按顺序递增,但执行顺序可按运算结果或当时的外界条件而改变。
(5)以运算器为中心,I/O设备与存储器间的数据传送都要通过运算器。
(6)数据以二进制表示。
参考First Draft of a Report on the EDVACweb
图灵机,又称图灵计算、图灵计算机,是由数学家艾伦·麦席森·图灵(1912~1954)提出的一种抽象计算模型,即将人们使用纸笔进行数学运算的过程进行抽象,由一个虚拟的机器替代人们进行数学运算。
所谓的图灵机就是指一个抽象的机器,它有一条无限长的纸带,纸带分红了一个一个的小方格,每一个方格有不一样的颜色。有一个机器头在纸带上移来移去。机器头有一组内部状态,还有一些固定的程序。在每一个时刻,机器头都要从当前纸带上读入一个方格信息,而后结合本身的内部状态查找程序表,根据程序输出信息到纸带方格上,并转换本身的内部状态,而后进行移动。
一台图灵机是一个七元组,{Q,Σ,Γ,δ,q0,qaccept,qreject},其中 Q,Σ,Γ 都是有限集合,且知足
Q 是状态集合;
Σ 是输入字母表,其中不包含特殊的空白符;
Γ 是带字母表;
δ:Q×「→Q×Γ×{L,R}是转移函数,其中L,R 表示读写头是向左移仍是向右移;
q0∈Q是起始状态;
qaccept是接受状态;
qreject是拒绝状态,且qreject≠qaccept
图灵机 M = (Q,Σ,Γ,δ,q0,qaccept,qreject)。
电子计算机的问世,奠定人是英国科学家艾兰· 图灵(Alan Turing)和美籍匈牙利科学家冯· 诺依曼(John Von· Neumann)。图灵的贡献是创建了图灵机的理论模型,奠基了人工智能的基础。而冯· 诺依曼则是首先提出了计算机体系结构的设想。
图灵机是为了探索可计算问题的数学领域,并得到描述这些计算的方法而发明的理论概念。冯-诺伊曼体系结构是一种用于构建实际计算机的体系结构(实现图灵机器理论上描述的内容),是一种实现通用图灵机的计算设备。sql
程序:是指令,数据及其组织形式的描述,是指为了获得某种结果而能够由计算机等具备信息处理能力的装置执行的代码化指令序列,或者能够被自动转换成代码化指令序列的符号化指令序列或者符号化语句序列。
指令:告诉计算机从事某一特殊运算的代码。如:数据传送指令、算术运算指令、位运算指令、程序流程控制指令、串操做指令、处理器控制指令。
指令和数据是应用上的概念。在内存或磁盘上,指令和数据是没有任何区别的,都是二进制信息。CPU在工做的时候,把有的信息看作是指令,有的信息看作是数据,为一样的信息赋予了不一样的意义。数据库
计算机程序通常都会使用到一些内存,这些内存或是程序内部使用,或是存放用户的输入数据,这样的内存通常称做缓冲区。溢出是指盛放的东西超出容器容量而溢出来了,在计算机程序中,就是数据使用到了被分配内存空间以外的内存空间。而缓冲区溢出,简单的说就是计算机对接收的输入数据没有进行有效的检测(理想的状况是程序检查数据长度并不容许输入超过缓冲区长度的字符),向缓冲区内填充数据时超过了缓冲区自己的容量,而致使数据溢出到被分配空间以外的内存空间,使得溢出的数据覆盖了其余内存空间的数据。
经过往程序的缓冲区写超出其长度的内容,形成缓冲区的溢出,从而破坏程序的堆栈,形成程序崩溃或使程序转而执行其它指令,以达到攻击的目的。形成缓冲区溢出的缘由是程序中没有仔细检查用户输入的参数。安全
XSS攻击全称跨站脚本攻击,是一种在web应用中的计算机安全漏洞,它容许恶意web用户将代码植入到提供给其它用户使用的页面中。好比这些代码包括HTML代码和客户端脚本。攻击者利用XSS漏洞旁路掉访问控制——例如同源策略(same origin policy)。这种类型的漏洞因为被骇客用来编写危害性更大的网络钓鱼(Phishing)攻击而变得广为人知。对于跨站脚本攻击,骇客界共识是:跨站脚本攻击是新型的“缓冲区溢出攻击“,而JavaScript是新型的“ShellCode”。网络
SQL注入攻击是黑客对数据库进行攻击的经常使用手段之一。随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也愈来愈多。可是因为程序员的水平及经验也良莠不齐,至关大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。用户能够提交一段数据库查询代码,根据程序返回的结果,得到某些他想得知的数据,这就是所谓的SQL Injection,即SQL注入。xss
由上面的分析,能够发现共同点,它们都是利用了漏洞,将恶意代码经过某种方式注入了目标,而后执行恶意代码达到攻击的目的。所以防范的方法,应该在于,如何防止这些代码被注入,应该有一个更安全的检查机制,杜绝这些代码的注入。好比对于XSS攻击,针对编译器能够引入缓冲区的边界保护机制,杜绝溢出的发生,也就杜绝了恶意代码的注入。好比XSS攻击,对于用户的输入检查,过滤掉可能的脚本代码,对于SQL,一样加强过滤掉可能的SQL语法。
统一的防范方法是加入一个检查过滤机制,杜绝对于可能发生代码注入状况的发生。函数