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

教材学习内容总结

  • 程序编码

    GCC将源代码转化为可执行代码的步骤:

  • C预处理器——扩展源代码-生成.i文件
  • 编译器——产生两个源代码的汇编代码-——生成.s文件
  • 汇编器——将汇编代码转化成二进制目标代码——生成.o文件
  • 链接器——产生可执行代码文件

    机器级代码

    1.机器级编程的两种抽象
    (1)指令集结构ISA
    是机器级程序的格式和行为,定义了处理器状态、指令的格式,以及每条指令对状态的影响。
    (2)机器级程序使用的存储器地址是虚拟地址
    看上去是一个非常大的字节数组,实际上是将多个硬件存储器和操作系统软件组合起来。

2.几个处理器:

  • 程序计数器(CS:IP)
  • 整数寄存器(AX,BX,CX,DX)
  • 条件码寄存器(OF,SF,ZF,AF,PF,CF)
  • 浮点寄存器

一条机器指令只执行一个非常基本的操作。

程序编码

书上107页的代码,需要用到反汇编器。在Linux系统中,带‘d’命令行标志的程序OBJDUMP可以充当这个角色。

 

数据格式

数据传送指令的三个变种:

  • movb 传送字节
  • movw 传送字
  • movl 传送双字

    访问信息

    一个IA32中央处理单元(CPU)包含8个存储32位置的寄存器

    操作数指示符

  • 立即数
  • 寄存器
  • 存储器

    寻址方式

(1)立即数寻址方式

格式:$后加用标准c表示法表示的整数,如$0xAFF

(2)寄存器寻址方式

如%eax,与汇编中学过的AX寄存器类比。

(3)存储器寻址方式

  • 直接寻址方式
  • 寄存器间接寻址方式
  • 寄存器相对寻址方式
  • 基址变址寻址方式
  • 相对基址变址寻址方式

    数据传送指令

    MOV

  • movb 传送字节
  • movw 传送字
  • movl 传送双字

MOVS

  • movsbw 将做了符号扩展的字节传送到字
  • movsbl 将做了符号扩展的字节传送到双字
  • movswl 将做了符号扩展的字传送到双字

MOVZ

  • movzbw 将做了零扩展的字节传送到字
  • movzbl 将做了零扩展的字节传送到双字
  • movzwl 将做了零扩展的字传送到双字

算术和逻辑操作

一、加载有效地址

加载有效地址指令——leal,是movl指令的变形。

指令形式:从存储器读取数据到寄存器。

实际:将有效地址写入到目的操作数,而目的操作数必须是寄存器;并不真实引用存储器。

二、一元操作和二元操作

1.一元操作

只有一个操作数,既是源又是目的,可以是一个寄存器,或者存储器位置。

2.二元操作

第一个操作数可以是立即数、寄存器或者存储器位置
第二个操作数可以是寄存器或者存储器位置
但是不能同时是存储器位置。

控制

数据传送指令

MOV 不影响标志位
PUSH POP 不影响标志位
XCHG 交换指令 不影响标志位
XLAT 换码指令 不影响标志位
LEA 有效地址送寄存器指令 不影响标志位
PUSHF 标志进栈指令 不影响标志位
POPF 标志出栈指令 标志位由装入值决定
访问条件码

这个指的是SET指令,通过set与不同的条件码的组合,达到不同的跳转条件。
某些底层的机器指令可能有多个名字,我们称之为“同义名”。
跳转指令及其编码
jump分为直接跳转和间接跳转:

直接跳转:后面跟标号作为跳转目标
间接跳转:*后面跟一个操作数指示符

过程

一个过程调用包括将数据和控制从代码的一部分传递到另一部分。另外,它还必须在进入时为过程的局部变量分配空间,并在退出时释放这些空间。
一、栈帧结构

栈用来传递参数、存储返回信息、保存寄存器,以及本地存储。

1.栈帧

为单个过程分配的那部分栈称为栈帧,通用结构见149页

所以本质上栈帧还是栈。

2.两个指针

最顶端的栈帧以两个指针界定:

寄存器%ebp-帧指针

寄存器%esp-栈指针

栈指针可移动,所以信息访问多相对于帧指针。
二、转移控制

这里用到的主要就是CALL和RET这一对指令。

1.call

call指令和转移指令相似,同样分直接和间接,直接调用的目标是标号,间接调用的目标是*后面跟一个操作数指示符,和JMP一样。

CALL指令的效果是将返回地址入栈,并跳转到被调用过程的起始处。返回地址是还在程序中紧跟在call后面的那条指令的地址。

然后就会用到ret了。

2.ret

ret指从栈中弹出地址,返回到call指令后的那条指令。

教材学习中的问题和解决过程

我无法使用gcc进行汇编QAQ,不知道为什么,我也去看别的同学的方法,cat 方法也进行了尝试,但是没法生成.o .h文件,无法进行汇编= =,这个之后去请教同学解决吧。

本周代码托管截图

那个在截图的时候虚拟机黑屏了,分了两次git,第一次有四个代码,第二次有一个代码。我的虚拟机在缩小一倍窗口后进行拖动就会黑屏,这是我第二次在进行问题截屏时发现的。

本周的个人思考问题

本周的内容主要和上个学期相关的汇编课程,因为这门课程我学的不太好,理解不深,学起来很吃力,所以这周的我还是停留在书中的内容中,还是先去吃书上的基本内容,这都是我欠下的债,到现在得还,所以我这周的学习因为我的基础就不稳,十分的吃力,但是我相信在之后的学习中,我会每周多学一点,一点一点的将之前欠下的债还清,因为现在也是大三的学生,希望能够在学习中提升自己的自身价值和竞争力。

学习进度条

  代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 24篇 350小时  
第一周 0/0行 1/2 8小时  
第二周 49/49行 1/3 10/18小时  
第三周 0/49行 2/5 10/28小时  
第四周 0/49行 1/5 0/28小时  
第五周 42/91行 1/6 15/43小时  

注释

-Linux内核分析
-程序的机器级表示

时间: 2024-09-29 05:41:39

20145205 《信息安全系统设计基础》第5周学习总结的相关文章

20145216 史婧瑶《信息安全系统设计基础》第一周学习总结

20145216 <信息安全系统设计基础>第一周学习总结 教材学习内容总结 Linux基础 1.ls命令 ls或ls .显示是当前目录的内容,这里“.”就是参数,表示当前目录,是缺省的可以省略.我们可以用ls -a .显示当前目录中的所有内容,包括隐藏文件和目录.其中“-a” 就是选项,改变了显示的内容.如图所示: 2.man命令 man命令可以查看帮助文档,如 man man : 若在shell中输入 man+数字+命令/函数 即可以查到相关的命令和函数:若不加数字,那man命令默认从数字较

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

20145311 <信息安全系统设计基础>第一周学习总结 教材学习内容总结 常用的部分命令 CTRL+SHIFT+T:新建标签页,编程时有重要应用: ALT+数字N:终端中切换到第N个标签页,编程时有重要应用: Tab:终端中命令补全,当输入某个命令的开头的一部分后,按下Tab键就可以得到提示或者帮助完成: CTRL+C:中断程序运行 Ctrl+D:键盘输入结束或退出终端 Ctrl+S: 暂定当前程序,暂停后按下任意键恢复运行 Ctrl+A: 将光标移至输入行头,相当于Home键 Ctrl+E

20145216史婧瑶《信息安全系统设计基础》第九周学习总结

20145216史婧瑶<信息安全系统设计基础>第九周学习总结 教材内容总结 第十章 系统级I/O 输入/输出(I/O)是在主存和外部设备之间拷贝数据的过程. 第一节 Unix I/O 这一节涉及到操作系统的基本抽象之一--文件.也就是说,所有的I/O设备都被模型化为文件,而所有的输入输出都被当做对相应文件的读/写.相关的执行动作如下: 1.打开文件: 应用程序向内核发出请求→要求内核打开相应的文件→内核返回文件描述符 文件描述符:一个小的非负整数,用来在后续对此文件的所有操作中标识这个文件.有

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

20145311 <信息安全系统设计基础>第二周学习总结 教材学习内容总结 重新学习了一下上周的一部分命令:grep main wyx.c(grep的全文检索功能)ls > ls.txt :ls内容输出到文本find pathname -mtime -n/+nfind -size -n/+n (find的功能还是比较强大) 简单地学习了一下vim编辑器,跟着vimtutor简单地学了一些,在linux bash中使用vim能够极大地提高效率, vim的用法比较多,只学习了其中简单的一部分

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

20145339顿珠达杰<信息安全系统设计基础>第一周学习总结 ◆ Linux是一个操作系统.如果使用GUI,Linux和Windows没有什么区别.Linux学习应用的一个特点是通过命令行进行使用. 物理机系统上可以通过使用[Ctrl]+[Alt]+[F1]-[F6]进行终端和图形界面切换,在线实验环境中按下[Ctrl]+[Alt]+[F7]来完成切换.普通意义上的 Shell 就是可以接受用户输入命令的程序,Unix/Linux 操作系统下的 Shell 既是用户交互的界面,也是控制系统的

2017-2018-1 20155228 《信息安全系统设计基础》第九周学习总结

2017-2018-1 20155228 <信息安全系统设计基础>第九周学习总结 教材学习内容总结 常见的存储技术 RAM 随机访问存储器(Random-Access Memory, RAM)分为两类:静态的和动态的.静态 RAM(SRAM)比动态RAM(DRAM)更快,但也贵得多.SRAM用来作为高速缓存存储 器,既可以在CPU芯片上,也可以在片下.DRAM用来作为主存以及图形系统的帧缓冲 区.典型地,一个桌面系统的SRAM不会超过几兆字节,但是DRAM却有几百或几千兆 字节. SRAM将每

2017-2018-1 20155332 《信息安全系统设计基础》第九周学习总结

2017-2018-1 20155332 <信息安全系统设计基础>第九周学习总结 教材学习内容总结 简单模型中,存储器是一个线性的字节数组.真实模型中,是一个具有不同容量,成本,访问时间的存储层次结构(存储器山) 程序的局部性很重要,对程序性能有很重要的影响. 计算机系统一个基本而持久的思想,如果你理解了系统是如何将数据在存储器层级结构中上下移动,你就可以编写程序,让数据存储在层次结构中较高的地方,从而CPU可以更快的访问到他们. 编写程序实现功能是最简单的,如何让编写的程序拥有最高的性能,例

2017-2018-1 20155227 《信息安全系统设计基础》第九周学习总结

2017-2018-1 20155227 <信息安全系统设计基础>第九周学习总结 教材学习内容总结 第六章 随机访问存储器 随机访问存储器分为:静态RAM(SRAM)和动态RAM(DRAM),静态RAM(SRAM)比动态RAM(DRAM)更快,但也贵很多. (1)静态RAM SRAM将每个位存储在一个双稳态的存储器单元里,每个单元是用一个六晶体管电路来实现的. 属性:它可以无限制地保持在两个不同的电压配置或状态之一.其他任何状态都是不稳定的. 特点:由于SRAM的双稳态特性,只要有电,它就会永

2017-2018-1 20155334 《信息安全系统设计基础》第九周学习总结

2017-2018-1 20155334 <信息安全系统设计基础>第九周学习总结 学习目标: 了解常见的存储技术(RAM.ROM.磁盘.固态硬盘等) 理解局部性原理 理解缓存思想 理解局部性原理和缓存思想在存储层次结构中的应用 高速缓存的原理和应用 教材学习内容总结 一.常见的存储技术: 基本的存储技术包括随机存储器(RAM).非易失性存储器(ROM)和磁盘. 1. RAM分静态RAM(SRAM)和动态RAM(DRAM). 2. SRAM快些,主要用做CPU芯片上的高速缓存,也可以用作芯片下的

2017-2018-1 20155331 《信息安全系统设计基础》第九周学习总结

2017-2018-1 20155331 <信息安全系统设计基础>第九周学习总结 教材学习内容总结 存储器层次结构 存储技术 随机访问存储器 随机访问存储器分为:静态的SRAM.动态的DRAM 静态RAM: SRAM的特点:存储器单元具有双稳态特性,只要有电就会永远保持它的值,干扰消除时,电路就会恢复到稳定值. 动态RAM: DRAM的特点:每一位的存储是对一个电容的充电:对干扰非常敏感. 用途:数码照相机和摄像机的传感器 DRAM存储不稳定的应对机制: 存储器系统必须周期性地通过读出,或者重