计算机指令

缓冲区溢出攻击

。_饼干妹妹 提交于 2019-11-27 16:38:02
缓冲区溢出攻击 缓冲区溢出( Buffer Overflow )是计算机安全领域内既经典而又古老的话题。随着计算机系统安全性的加强,传统的缓冲区溢出攻击方式可能变得不再奏效,相应的介绍缓冲区溢出原理的资料也变得“大众化”起来。其中看雪的《 0day 安全:软件漏洞分析技术》一书将缓冲区溢出攻击的原理阐述得简洁明了。本文参考该书对缓冲区溢出原理的讲解,并结合实际的代码实例进行验证。不过即便如此,完成一个简单的溢出代码也需要解决很多书中无法涉及的问题,尤其是面对较新的具有安全特性的编译器——比如 MS 的 Visual Studio2010 。接下来,我们结合具体代码,按照对缓冲区溢出原理的循序渐进地理解方式去挖掘缓冲区溢出背后的底层机制。 一、代码 <=> 数据 顾名思义,缓冲区溢出的含义是为缓冲区提供了多于其存储容量的数据,就像往杯子里倒入了过量的水一样。通常情况下,缓冲区溢出的数据只会破坏程序数据,造成意外终止。但是如果有人精心构造溢出数据的内容,那么就有可能获得系统的控制权!如果说用户(也可能是黑客)提供了水——缓冲区溢出攻击的数据,那么系统提供了溢出的容器——缓冲区。 缓冲区在系统中的表现形式是多样的,高级语言定义的变量、数组、结构体等在运行时可以说都是保存在缓冲区内的,因此所谓缓冲区可以更抽象地理解为一段可读写的内存区域

彻底搞懂volatile关键字

让人想犯罪 __ 提交于 2019-11-27 15:52:08
对于volatile这个关键字,相信很多朋友都听说过,甚至使用过,这个关键字虽然字面上理解起来比较简单,但是要用好起来却不是一件容易的事。 这篇文章将从多个方面来讲解volatile,让你对它更加理解。 计算机中为什么会出现线程不安全的问题 volatile既然是与线程安全有关的问题,那我们先来了解一下计算机在处理数据的过程中为什么会出现线程不安全的问题。 大家都知道,计算机在执行程序时,每条指令都是在CPU中执行的,而执行指令过程中会涉及到数据的读取和写入。由于程序运行过程中的临时数据是存放在主存(物理内存)当中的,这时就存在一个问题,由于CPU执行速度很快,而从内存读取数据和向内存写入数据的过程跟CPU执行指令的速度比起来要慢的多,因此如果任何时候对数据的操作都要通过和内存的交互来进行,会大大降低指令执行的速度。 为了处理这个问题,在CPU里面就有了高速缓存(Cache)的概念。当程序在运行过程中,会将运算需要的数据从主存复制一份到CPU的高速缓存当中,那么CPU进行计算时就可以直接从它的高速缓存读取数据和向其中写入数据,当运算结束之后,再将高速缓存中的数据刷新到主存当中。 我举个简单的例子,比如cpu在执行下面这段代码的时候, t = t + 1; 会先从高速缓存中查看是否有t的值,如果有,则直接拿来使用,如果没有,则会从主存中读取

VPP tips

别来无恙 提交于 2019-11-27 15:32:06
VPP tips 1. 性能从何而来。 原文链接: http://www.360doc.com/content/18/0428/20/53742993_749517107.shtml https://steeven.iteye.com/blog/2347150 DPDK代码级别性能优化总结 https://www.jianshu.com/p/346bf99b2fb1 https://www.jianshu.com/p/ed914b24f6da https://blog.csdn.net/Dgh19940/article/details/79603843 架构角度: DPDK 的巨页 、 NUMA 、 D-cache 优化, VPP 的 I-cache 优化 ; 算法角度: Bihash ,查表 lockless ; 代码角度: Vector 、 宏构造函数 、 结构体 cacheline 对齐 、 线程绑核 、指令预取、指令优化; 2. 路由查找 https://blog.csdn.net/dog250/article/details/6596046 Internet 路由之路由表查找算法概述 - 哈希 /LC-Trie 树 /256-way-mtrie 树 3. __constructor__ 修饰符 通过一个简单的例子介绍一下 gcc 的 __attribute__ (

JavaScript函数尾调用与尾递归

半世苍凉 提交于 2019-11-27 15:13:48
什么是函数尾调用和尾递归 函数尾调用与尾递归的应用 一、什么是函数的尾调用和尾递归 函数尾调用就是指函数的最后一步是调用另一个函数。 1 //函数尾调用示例一 2 function foo(x){ 3 return g(x); 4 } 5 //函数尾调用示例二 6 function fun(x){ 7 if(x > 0){ 8 return g(x); 9 } 10 return y(x); 11 } 调用最后一步和最后一行代码的区别,最后一步的代码并不一定会在最后一行,比如示例二。还有下面这一种不能叫做函数尾调用: 1 // 下面这种情况不叫做函数尾调用 2 function fu(x){ 3 var y = 10 * x; 4 g(y); 5 } 为什么这种情况不叫作函数的尾调用呢?原因很简单,因为函数执行的最后一步是return指令,这个指令有两个功能,第一个功能是结束当前函数执行,第二个功能是将指令后面的数据传递出去(函数返回值)。而这个return指令不管有没有声明都会执行,没有声明的情况下返回的数据是undefined,所以上面的代码实际上是以下结构: 1 function fu(x){ 2 var y = 10 * x; 3 g(y); 4 return undefined; 5 } return指令是先关闭函数,然后再返回数据。说到这里,就会引发一个问题出来

Linux实操、优化

廉价感情. 提交于 2019-11-27 14:01:11
Linux特点:   免费,开源,安全,高效,稳定,处理高并发非常强悍。 目录结构   Linux世界里,一切皆文件。   Linux文件系统是采用层级式的树状目录结构 树状目录结构: 1 /bin: 2 bin是Binary的缩写, 这个目录存放着最经常使用的命令。 3 4 /boot: 5 这里存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件。 6 7 /dev : 8 dev是Device(设备)的缩写, 该目录下存放的是Linux的外部设备,在Linux中访问设备的方式和访问文件的方式是相同的。 9 10 /etc: 11 这个目录用来存放所有的系统管理所需要的配置文件和子目录。 12 13 /home: 14 用户的主目录,在Linux中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。 15 16 /lib: 17 这个目录里存放着系统最基本的动态连接共享库,其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。 18 19 /lost+found: 20 这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。 21 22 /media: 23 linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后,linux会把识别的设备挂载到这个目录下。 24 25 /mnt: 26

重学计算机组成原理(五)- \"旋转跳跃\"的指令实现

不问归期 提交于 2019-11-27 06:21:06
CPU执行的也不只是一条指令,一般一个程序包含很多条指令 因为有if…else、for这样的条件和循环存在,这些指令也不会一路平直执行下去。 一个计算机程序是怎么被分解成一条条指令来执行的呢 1 CPU如何执行指令 CPU里差不多几百亿个晶体管 实际上,一条条计算机指令执行起来非常复杂 好在CPU在软件层面已经为我们做好了封装 对于程序员来说,我们只要知道,写好的代码变成了指令之后,是一条一条 顺序执行 不管几百亿的晶体管的背后是怎么通过电路运转起来的 逻辑上,我们可以认为,CPU其实就是由一堆寄存器组成的 而寄存器就是CPU内部,由多个触发器(Flip-Flop)或者锁存器(Latches)组成的简单电路。 触发器和锁存器,其实就是两种不同原理的数字电路组成的逻辑门 如果想要深入学习的话,可以学习数字电路的相关课程 N个触发器或者锁存器,就可以组成一个N位(Bit)的寄存器,能够保存N位的数据 比方说,我们用的64位Intel服务器,寄存器就是64位的 CPU里有很多种不同功能的 1.1 寄存器 寄存器(Register),是中央处理器内的其中组成部分。寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和地址。在中央处理器的控制部件中,包含的寄存器有指令寄存器(IR)和程序计数器。在中央处理器的算术及逻辑部件中,包含的寄存器有累加器。 在计算机体系结构里

S7-200 PLC自由口通信发送指令( XMT)应用

早过忘川 提交于 2019-11-27 05:47:13
【例7-3】把CPU 224的Port0定义为自由口通信模式。在一个定时中断程序中对定时中断次数计数,并将计数值转换为ASCII字符串,再从Port0发送出去。计算机接收并利用超级终端(Hyper Terminal)显示与S7-200 CPU的通信的内容。 自由口通信模式以字节为单位发送数据,而不考虑其内容,在这个例子中使用ASCII字符只是为了便于在PC机上显示。 1.参数设置 自由口通信模式。通信协议为:波特率9600,无奇偶校验,每字符8位。规定发送缓冲区从VB100开始,如表7-13所示。在本例中设置16#0D0A为结束字符,是因为在Hyper Terminal(超级终端)中16#0D0A正好是字符“回车”,可用来换行显示。 表7-13 发送缓冲区数据定义 VB100 14 发送数据字节数 VB101-112 数据字节 ASCII字符表(共12字节长) VB113 16#0D 消息结束字符 VB114 16#0A 即“回车”符 2.程序 使用Data Block(数据块)定义发送缓冲区,如图7-27所示。 图7-27 数据块 本例PLC程序包括主程序、子程序SBR_1、SBR_0和中断子程序,分别如图7-28~图7-31所示。 主程序:初始化自由口通信设置,并根据“模式选择开关”的状态重新设置通信端口0。SBR_0:定义通信端口0为自由口,初始化定时中断。SBR_1

计算机基础知识(一)

本秂侑毒 提交于 2019-11-27 02:41:02
计算机系统: 硬件系统:运算器 控制器 存储器 输入设备 输出设备 五个部分组成 其中 中央处理器CPU=运算器+控制器 主机 = 中央处理器 + 主存储器 软件系统:系统软件和应用软件 各类程序和数据 1,运算器:完成算术和逻辑运算的部件,计算机所完成的全部运算都是在运算器中进行的。 核心部件:运算逻辑部件 和 寄存器部件 2,控制器:负责从存储器中取出指令,并对指令进行编码,并根据指令译码的结果,按指令先后顺序,负责向其他各部件发出 控制信号,保证各部件协调一致地完成各种操作。 组成部件: 程序计数器:存放下一条将要执行的指令在内存中的地址; 指令寄存器:保存现在正在执行的指令 指令译码器:用来识别指令的功能,分析指令的操作要求 时序部件:产生计算机工作中所需的各种定时控制信号,对各种微操作控制信号进行定时控制,以协调各部件的工作顺序 微操作控制电路:一条指令的执行可以分解为一系列不可再分的微操作命令信号,即微命令,以指挥整个计算机有条不紊地 工作。 3,存储器: 4,输入设备:键盘,鼠标,扫描仪 5,输出设备:显示器,打印机 中央处理器CPU:运算器+控制器 从存储器取出指令,放入CPU内部的指令寄存器,指令译码器并对指令译码,微操作控制电路把指令分解成一系列的微操作,然后发出各种控制命令,执行微操作系列,从而完成一条指令的执行。 CPU主要性能指标: 1,主频 / 外频

Java的基本概念

你。 提交于 2019-11-27 02:18:05
Java的基本概念 Java是什么 Java是一种计算机语言,主要是用来做开发的一种语言。 核心的特点是:跨平台,面向对象。 什么是程序 程序:为了让计算机执行某些操作或解决某个问题而编写的一系列有序指令的集合 开发java程序的步骤 1、编写源程序:文件名后缀为.java; 2、编译:javac指令编译.java文件 编译后的文件名后缀为.class; 3、运行:在控制台面板运行.class文件; Java程序的基本结构 Java的基本框架 ​ 1.class方法: public class 类名 { } (注意:class方法必不可少并且固定语法,是一个程序的基本结构,这里的类名必须和文件名一致) ​ 2.main()方法: public static void main ( String [ ] args ) { } (注意:main()方法为一个Java程序的入口是必不可少的,除小括号里的中括号以及args可以变动其他全部固定语法,并且一个程序只能有一个main()方法) ​ 3.输出语句: System . out . print ( "" ) ; (注意:这一行代码的作用是向控制台输出,"“符号里为需要输出的内容,可以出现多个,这里有两个转义字符 :”\t" 相当于一个制表键、 "\n"相当于换行。) Java程序中的注释 ​ 1.注释的作用:为了方便程序的阅读

网络变成操作系统详解

大城市里の小女人 提交于 2019-11-27 00:06:02
一 为什么要有操作系统 ( 两本书:现代操作系统、操作系统原理,学好python以后再去研究吧~~)   现代的计算机系统主要是由一个或者多个处理器,主存,硬盘,键盘,鼠标,显示器,打印机,网络接口及其他输入输出设备组成。   一般而言,现代计算机系统是一个复杂的系统。   其一:如果每位应用程序员都必须掌握该系统所有的细节,那就不可能再编写代码了(严重影响了程序员的开发效率:全部掌握这些细节可能需要一万年....)   其二:并且管理这些部件并加以优化使用,是一件极富挑战性的工作,于是,计算安装了一层软件(系统软件),称为操作系统。它的任务就是为用户程序提供一个更好、更简单、更清晰的计算机模型,并管理刚才提到的所有设备。 总结:    程序员无法把所有的硬件操作细节都了解到,管理这些硬件并且加以优化使用是非常繁琐的工作,这个繁琐的工作就是操作系统来干的,有了他,程序员就从这些繁琐的工作中解脱了出来,只需要考虑自己的应用软件的编写就可以了,应用软件直接使用操作系统提供的功能来间接使用硬件。 二 什么是操作系统    精简的说的话,操作系统就是一个协调、管理和控制计算机硬件资源和软件资源的控制程序。操作系统所处的位置如图1 #操作系统位于计算机硬件与应用软件之间,本质也是一个软件。操作系统由操作系统的内核(运行于内核态,管理硬件资源)以及系统调用(运行于用户态