1. s7
怎样理解状态字(status word)? 1. /FC,首次检测位 状态字的第0位——“/FC”称为“首次检测位”,控制一串逻辑指令的顺序。
“/FC”位信号状态为“0”,说明用户程序中从这一点开始下面的逻辑指令,作为新的逻辑串(换而言之:在每一个逻辑串开始时,“/FC”位总为0)。 每一个逻辑指令检测“/FC”位的状态,就像指令检测它的寻址接点一样,决定了指令对其寻址状态、信号状态检测结果的存放位置。
如果“/FC”位的状态为0,逻辑指令将结果存在(逻辑操作的结果位)“RLO”中,并将“/FC”位的状态置为1。这一过程,称为“首次检测”。
经过首次检测存放在“RLO”中的0或者1,被称为“首次检测的结果”。 在一个逻辑串中,当CPU完成逻辑串中的第一条指令以后,“/FC”位的状态一直为1。
当“/FC”位为1时,指令操作将其寻址接点的“检测结果状态”与先前存放在“RLO”中的状态结合起来。 一串逻辑指令总是以一个输出指令(如:S、R、=),或者一个与逻辑操作结果相关的条件跳转指令(JC),或者一个嵌套指令[ 如:A(、O(、X(、AN(、ON(、XN( ] 作为结束。
这些输出指令、跳转指令、嵌套指令将“/FC”位复位至0。 2. RLO,逻辑操作的结果 状态字的第1位——“RLO”称为“逻辑操作的结果(Result of logic operation)”,存放一个位逻辑指令,或者算术比较指令的结果。
例如,在一串“位逻辑指令”中的第二条指令,检测寻址接点的信号状态,并且产生一个“0或者1的结果”。然后,指令将这一“0或者1的结果”和状态字中的“RLO”值进行布尔逻辑运算,结果代替上一次的“RLO”值,并且存放在状态字的“RLO”中。
每一个接下来逻辑串中的指令,均是根据这两个值(一个值为“指令检测寻址接点所产生的结果”,另一个值为“当前的RLO”)进行布尔逻辑运算操作。 用户可以使用“SET”指令,无条件置位RLO为1;使用“CLR”指令,无条件复位RLO为0。
用户可以使用RLO的状态,触发跳转指令。 在一串“位逻辑指令”中的第一条指令,检测寻址接点的信号状态,并且产生一个“1的检测结果”,存放在RLO位,并且将“/FC”位复位至0。
2. 写程序,溢出是啥意思
溢出是程序设计者设计时的不足所带来的错误。
一般来说,更改底层系统以避免常见的安全问题是一个极好的想法,我们在本文后面也会遇到这个主题。事实证明存在许多可用的防御措施,而一些最受欢迎的措施可分组为以下类别:
基于探测方法(canary)的防御。这包括 StackGuard(由 Immunix 所使用)、ProPolice(由 OpenBSD 所使用)和 Microsoft 的 /GS 选项。
非执行的堆栈防御。这包括 Solar Designer 的 non-exec补丁(由 OpenWall 所使用)和 exec shield(由 Red Hat/Fedora 所使用)。
其他方法。这包括 libsafe(由 Mandrake 所使用)和堆栈分割方法。
遗憾的是,迄今所见的所有方法都具有弱点,因此它们不是万能药,但是它们会提供一些帮助。
3. 什么是溢出
此涉及到编程知识:
比如说一个一个整数,最大范围是2的32次方,
但是你给它赋的值比最大范围大10,那么这个整数就会再从最小范围处加10;
大概就这样。
什么是溢出?
溢出全名是“缓冲区溢出”缓冲区是内存中存放数据的地方。在程序试图将数据放到机器内存中的某一个位置的时候,因为没有足够的空间就会发生缓冲区溢出。而人为的溢出则是有一定企图的,攻击者写一个超过缓冲区长度的字符串,然后植入到缓冲区,而再向一个有限空间的缓冲区中植入超长的字符串可能会出现两个结果,一是过长的字符串覆盖了相邻的存储单元,引起程序运行失败,严重的可导致系统崩溃;另有一个结果就是利用这种漏洞可以执行任意指令,甚至可以取得系统root特级权限。大多造成缓冲区溢出的原因是程序中没有仔细检查用户输入参数而造成的。
缓冲区是程序运行的时候机器内存中的一个连续块,它保存了给定类型的数据,随着动态分配变量会出现问题。大多时为了不占用太多的内存,一个有动态分配变量的程序在程序运行时才决定给它们分配多少内存。这样想下去的话,如果说要给程序在动态分配缓冲区放入超长的数据,它就会溢出了。一个缓冲区溢出程序使用这个溢出的数据将汇编语言代码放到机器的内存里,通常是产生root权限的地方,这就不是什么好现象了。仅仅就单个的缓冲区溢出惹眼,它并不是最大的问题根本所在。但如果溢出送到能够以root权限运行命令的区域,一旦运行这些命令,那可就等于把机器拱手相让了。