指令寄存器

20145206 《信息安全系统设计基础》第6周学习总结

巧了我就是萌 提交于 2020-02-04 04:19:17
20145206 《信息安全系统设计基础》第6周学习总结 教材学习内容总结 1.流水线化的处理器: 将每条指令的执行分解成五步,每个步骤由一个独立的硬件部分或者阶段来处理。指令步经流水线的各个阶段,且每个时钟周期有一条新指令进入流水线。所以处理器可以同时执行五条指令的不同阶段。 2.程序员可见的状态: Y86程序中的每条指令都会读取或者修改处理器状态中的某些部分。这称为程序员可见状态。 3.Stat 程序状态的最后一个部分是状态码Stat,它表明程序执行的总体状态;它会指示是正常运行还是出现了某种异常。 4.Y86 一个简单的、可以称之为IA32指令集的子集的指令集;只包括四字节整数操作,寻址方式比较少。指令编码长度从1——6字节不等。 关于指令结构,每条指令的第一个字节表明指令的类型;这个字节分为两个部分,每部分四位:高四位是代码部分(0——0xB),第四位是功能部分。这里补充一些缩写:立即数(i),寄存器(r)、存储器(m)。指令附加的寄存器指示符字节依次是数据源(如果是立即数,把这一位设置成0xf)、目的寄存器/基址寄存器。有些指令需要附加四字节的常数字,采用小端法(倒序)编码 5.stat代码可能取值反应了机器的不同状态—— AOK:正常操作(除此之外的任何状态都会使得处理器停止执行指令) HLT:处理器执行halt指令 ADR:遇到非法地址 INS:遇到非法指令 6

ARM exploit编写三

断了今生、忘了曾经 提交于 2020-02-04 02:08:43
上一个实验中我们已经介绍了reverse shell(反向shell)的原理,再回顾一下 在reverse shell的场景下,内网的机器会主动连接到外网的几次上,比如作为攻击者,我们会在系统上开放一个监听端口,等待来自目标主机的弹回的连接。 同样,还是先看看C语言是怎么实现的。 完整代码在reverse.c中 第一步是确定必要的系统函数,其参数和系统调用号。 看看给出的C代码,我们可以看到我们需要以下函数:socket,connect,dup2,execve。 可以使用以下命令计算出这些函数的系统调用号: 以socket为例 用这样办法,得到的系统调用号如下 每个函数涉及的参数可以使用man xxx来查看,以execve为例 已经整理好,如下所示 下一步是弄清楚这些参数的具体值。 一种方法是使用strace查看成功的reverse shell连接。 Strace是一种工具,可用于跟踪系统调用并监视进程与Linux内核之间的交互。 让我们使用strace来测试我们reverse shell的C版本。 为了避免无关代码的干扰,我们使用-e将输出限制为我们感兴趣的功能。 这里注意,因为是反向连接,而且我在源码里写死的端口是1337,所以我们需要在另一个终端中先监听端口 然后再运行生成的可执行文件 然后输入whoami命令测试

单片机的中断系统

独自空忆成欢 提交于 2020-02-02 04:38:04
有关单片机中断系统的概念:什么是中断,我们从一个生活中的例程引入。你正在家中看书,突然电话铃响了,你放下书本,去接电话,和来电话的人交谈,然后放下电话,回来继续看你的书。这就是生活中的“中断”的现象,就是正常的工作过程被外部的事件打断了。仔细研究一下生活中的中断,对于我们学习单片机的中断也很有好处。 第一、什么可经引起中断,生活中很多事件能引起中断:有人按了门铃了,电话铃响了,你的闹钟闹响了,你烧的水开了….等等诸如此类的事件,我们把能引起中断的称之为中断源,单片机中也有一些能引起中断的事件,8031中一共有5个:两个外部中断,两个计数/定时器中断,一个串行口中断。 第二、中断的嵌套与优先级处理:设想一下,我们正在看书,电话铃响了,同时又有人按了门铃,你该先做那样呢?如果你正是在等一个很重要的电话,你一般不会去理会门铃的,而反之,你正在等一个重要的客人,则可能就不会去理会电话了。如果不是这两者(即不等电话,也不是等人上门),你可能会按你常常的习惯去处理。总之这里存在一个优先级的问题,单片机中也是如此,也有优先级的问题。优先级的问题不仅仅发生在两个中断同时产生的情况,也发生在一个中断已产生,又有一个中断产生的情况,比如你正接电话,有人按门铃的情况,或你正开门与人交谈,又有电话响了情况。考虑一下我们会怎么办吧。 第三、中断的响应过程:当有事件产生

简单计算机系统综合设计(CPU)

末鹿安然 提交于 2020-02-01 10:36:09
简单计算机系统综合设计(CPU) 前言:作为一位来自于湖南大学的本科生,让我最难忘记的就是这一次CPU的综合设计了。学软件的我,贴一篇硬件编程没啥意思,纯当打发时间。 基本部件 数字逻辑实验中我们要求完成的有以下基本部件,使用VHDL源完成编程。 0000:指令寄存器IR, a) 模块的接口设计 控制信号:LDIR,CLK,I[7…0] 输入信号:需执行指令I[7…0] 输出信号:需执行指令out1[7…0] b) 功能实现 根据指令寄存器IR的功能可知: 当HALT = 1 时,输出信号 x[7…0] 为高阻态; 否则,当处于时钟下降沿时,LDIR = 1时,输出信号out[7…0]为输入信号I[7…0]。 VHDL的实现如下所示: library ieee; use ieee.std_logic_1164.all; entity IR is port (LDIR, CLK : in std_logic; I : in std_logic_vector(7 downto 0); OUT1 : out std_logic_vector(7 downto 0) ); end IR; architecture behavior of IR is signal command: std_logic_vector(7 downto 0); begin OUT1 <= command;

csapp-系统栈和ROP技术

无人久伴 提交于 2020-02-01 05:19:47
前言:总结的都是基于我在计算机系统学习中的相对个人重难点。 栈帧 栈帧的内部模拟图片( 来源于百度图片 ): 图上所述结构一步一步来看: 返回地址以上部分的参数是存储在调用函数p中的栈帧中的变量值。而这个值是为下一步被调函数Q传参做准备的。需要注意的是,存在该部分的条件是因为寄存器中最多传递六个整型(即整型和指针参数)。而当传入的个数大于6时,超过六的部分参数,需要直接存储在栈帧中,并且是倒着顺序存入栈帧中(由栈顶到栈底顺序)。 补充栈上的局部存储: 1:寄存器不够存放所有的本地数据; 2:对某一个局部变量使用地址运算符“&”,必须为它产生一个地址; 3:某些局部变量数数组或者结构时。 引用《深入了解计算机系统》书上的两个例子: 第一个: 在long caller函数调用被调函数swap之前,开辟空间,将arg1和arg2先放入栈中,并且rsp存着&arg1,rsp+8存着&arg2,然后再将返回地址放入栈中,进行调用函数swap_add。 第二个 发现传入的参数的个数是8个,并且存在几个参数传入的地址,那么我们首先选出地址引用的&x1,&x2,&x3,&x4和第七个x4与第八个参数&x4.那么如上图根据“对某一个局部变量使用地址运算符“&”,必须为它产生一个地址”原则,为x1,x2,x3,x4按顺序产生地址,然后第七个和第八个参数就按照倒序的顺序存入即可x4存在rsp,

2018-2019-1 20165312 《信息安全系统设计基础》第四周学习总结

谁说胖子不能爱 提交于 2020-02-01 03:04:28
2018-2019-1 20165312 《信息安全系统设计基础》第四周学习总结 本周学习内容 1.程序员可见状态 程序寄存器(RF):%rax,%rsp,%r8,%r12,%rcx,%rbp,%r9,%r13,%rdr,%rsi,%r10,%r14,%rbr,%rdi,%r11; 条件码:ZF\SF\OF; 程序状态 AOK:正常操作; HLT:执行halt指令; ADR:非法地址; INS:非法指令; 程序计数器(PC):正在执行的指令的地址; 2.程序寄存器标识符 3、指令编码 4、指令集功能码 来源: https://www.cnblogs.com/cxgg/p/9827512.html

第六周学习报告

筅森魡賤 提交于 2020-02-01 02:55:32
4.1Y86指令体系结构 程序员可见状态 ISA: 一个处理器支持的指令和指令的字节级编码称为~。 冒险: 一条指令的位置或者操作数依赖于其他仍在流水线中的指令。 程序员可见状态: Y86程序中的每条指令都会读取或修改处理器状态的某些部分 =>只要我们保证机器级程序能够访问程序员可见状态,就不需要完全按照ISA隐藏方式来表示和组织这个处理器状态。 Y86的处理器状态类似于IA32。 有8个程序寄存器。处理器每个程序寄存器储存一个字。寄存器%esp被入栈,出栈,调用和返回指令作为栈指针。 有3个一位条件码:ZF,SF, OF.保存最近的算术或者逻辑指令所造成影响的有关信息。 程序计数器PC:存放当前正在执行指令的地址。 存储器:(概念上来说是一个很大的字节数组)保存着程序和数据。Y86程序用虚拟地址来引用存储器位置。 程序状态的最后一部分状态码Stat,表明程序执行总体状态。 Y86指令 只包括四字节整数操作,所以称之为“字 ”。 Y86指令集,长度1~6字节不等。一条指令含有一个单字节的指令表示符,可能含有一个单字节的寄存器指示符,还可能含有一个四字节的常数字。 字段fn:指明是某个整数操作(OPL),数据移动条件(comvxx)或是分支条件(jxx)。所有数值都使用16进制。 Y86指令的更多细节: movl指令分成了四个不同的指令irmovl,rrmovl

20145334 《信息安全系统设计基础》第六周学习

断了今生、忘了曾经 提交于 2020-02-01 02:08:04
1.程序员可见状态 Y86程序中的每条指令都会读取或修改处理器状态的某些部分,称为程序员可见状态。其中包括: 8个程序寄存器:%eax,%ecx,%edx,%ebx,%esi,%edi,%esp和%ebp。 条件码:ZF(零)、SF(符号)、OF(有符号溢出) 程序计数器(PC):存放当前正在执行的指令的地址 存储器:很大的字节数组,保存着程序和数据。Y86系统用虚拟地址来引用存储器的位置,硬件和操作系统软件联合起来将虚拟地址翻译成实际或者物理地址。 状态码(stat):表明程序执行的总体状态。 Y86指令 movl:irmovl、rrmovl、mrmovl、rmmovl,分别显式地指明源和目的地的格式。第一个字母表明源的类型,i(立即数)、r(寄存器)或m(存储器 ),第二个字母代表目的,可以是r或者m。 整数操作指令OPl:addl、subl、andl和xorl。只对寄存器数据进行操作,同时还设置条件码。 跳转指令jXX:jmp、jle、jl、je、jne、jge、jg,根据分支指令的类型和条件码的设置来选择分支。 条件传送指令cmovXX:cmovle、cmovl、cmove、cmovne、cmovge和comvg,与寄存器-寄存器传送指令rrmovl一样,但只有当条件码满足所需要的约束时才会更新目的寄存器的值。 call指令将返回地址入栈,然后跳转到目的地址

20145235 《信息安全系统设计基础》第06周学习总结 _01

霸气de小男生 提交于 2020-02-01 02:03:28
20145235 《信息安全系统设计基础》第06周学习总结 _01 4.1.4 Y86异常 关于可见状态码Stat的几个值: 1:AOK 程序执行正常 2:HLT 表示处理器执行了一条halt指令 3:ADR 表示处理器从一个非法的存储器地址读或者向一个非法的存储器地址写 4:INS 表示遇到非法指令 4.1.5 Y86程序 “.”开头的词是汇编器命令,告诉他们汇编器调整命令,以便在哪产生代码或者插入数据 P239 Y86程序结构: 声明代码产生的起始地址 (.pos 0 ) 初始化栈指针和帧指针 为代码所声明的数据开辟地址 给栈分配空间 指令模拟器,成为YIS。 模拟器只打印出在模拟过程中被改变了的寄存器或存储器中的字。左边是原始值,右边是最终值。 4.1.6 对于“pushl %esp”在上学期的汇编中有详细指明:是现将数据push,然后对指针sp进行修改;而对于“popl %esp”,是先修改指针,然后再进行pop。然而4.1.6中说是不确定的。 4.2 逻辑设计和硬件控制语言HCL 要实现数字系统,需三个主要组成部分: 计算对位进行操作的逻辑结构、存储位的存储器元素,以及控制存储器元素更新的时钟信号。 4.2.1 逻辑门 逻辑运算:&&、||、! 位运算:&、|、~ 4.2.2 组合电路和HCL布尔表达式 将很多逻辑门组合成一个网,就能构建计算快,称为组合电路。限制

处理器体系结构学习记录

笑着哭i 提交于 2020-02-01 01:16:57
重要知识点 指令集体系结构 一个处理器支持的指令和指令的字节级编码称为它的指令集体系结构。 Y86处理器 Y86处理器状态类似于IA32。有8个程序寄存器:%eax,%ecx,%edx,%ebx,%esi,%edi,%esp和%ebp。处理器每个程序寄存器存储一个字。寄存器%esp被入栈、出栈、调用和返回指令作为栈指针。在其他情况中,寄存器没有固定的含义或固定值。有3个一位的条件码:ZF、SF和OF,它们保存最近的算术或逻辑指令所造成影响的相关信息。程序计数器(PC)存放当前正在执行的指令地址。 Y86指令 字节 halt 0 0 nop 1 0 rrmovl rA,rB 2 0 rA rB irmovl V,rB 3 0 F rB V rmmovl rA,D(rB) 4 0 rA rB D mrmovl D(rB),rA 5 0 rA rB D OPl rA,rB 6 fn rA rB jXX Dest 7 fn Dest comvXX rA,rB 2 fn rA rB call Dest 8 0 Dest ret 9 0 pushl rA A 0 rA F popl rA B 0 rA F 注:rA、rB为寄存器标识符,V,D,为常数,Dest为地址。 Y86指令编码 整数操作编码 addl 6 0 subl 6 1 andl 6 2 xorl 6 3 分支操作编码 jmp 7