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

程序的机器级表示

3.2程序编码

gcc是Linux上默认的编译器 。gcc -0g告诉编译器使用第一级优化。优化等级越高,程序运行的越快,编译时间越长,用调试工具调试程序越困难。高级别的的优化产生的代码会严重改变形式。
gcc将源代码转换为可执行代码。首先,C预处理器扩展源代码,插入所有用#include命令指定的文件,并扩展所有用#define声明指定的宏。
汇编器将汇编代码转换成二进制目标代码,目标代码是机器代码的一种形式,包含所有指令的二进制表示,但没有填入地址的全局值。
连接器将目标文件与实现库函数的代码合并,并产生最终的可执行代码文件。可执行代码是处理器执行的代码格式。

3.2.2 代码示例

gcc -01 -s code.c //使用“-s” 就能得到C语言编译器产生的汇编代码 。这会产生一个汇编文件 code.s
gcc -01 -c code.c //使用“-c”gcc会编译并汇编该代码,产生目标代码文件code.o,他是二进制格式,无法直接查看。
反汇编器可以查看目标文件内容:objdump -d code.o
“gcc -01 -o prog code.o main.c” 通过之前讲的,应该是让编译器将目标文件“code.o”与实际函数库 “main.c”合并 生成可执行文件prog

3.2.3 关于格式的注解

3.3 数据格式

单精度:4字节 双精度:8字节 扩展精度:10字节实际存储成12字节
moveb、movw、movl:对应字节、字、双字。

3.5 算术和逻辑操作

加载有效地址
一元操作
二元操作
移位操作

3.5.1 加载有效地址

加油有效地址“leal”-将有效地址写到目的操作数,目的操作数必须是一个寄存器。

3.5.2 一元操作和二元操作

一元操作,它只有一个操作数,既是原操作数又是目的操作数,操作数可以是一个寄存器,也可以是一个存储器位置。
二元操作,有两个操作数,第一个为原操作数,可以是立即数、寄存器或存储器位置;第二个为目的操作数,可以是寄存器或者是存储器位置。
二元操作,有两个操作数,第一个为原操作数,可以是立即数、寄存器或存储器位置;第二个为目的操作数,可以是寄存器或者是存储器位置。

3.5.3 移位操作

移位操作,先给出位移量,第二项给出要移位的数值。
因为32为计算机,所以以为最多移位31为(排除循环移位),所以只允许0到31位的位移。
位移量可以是个立即数,或者是只允许%cl。
SAL和AHL没有区别。
SAR为算数右移,最高位要和符号标志位配合进行算数右移。
SHR为逻辑右移。
移位操作的目的操作数可以是一个寄存器或者是一个存储器的位置。

3.5.5 特殊的算术操作

双操作数乘法(imull)指令,从两个32位的操作数产生一个32位的乘积。
单操作数乘法指令mull和imull,这两条指令都要求一个参数必须在寄存器%eax中,另一个由原操作数给出,高32为存放在%edx中,低32为存放在%eax中。

3.6.1 条件码

CF:进位标志
ZF:零标志
SF:符号标志
OF:溢出标志位
leal指令不改变任何条件,用它进行地址计算。
对于移位操作,进位标志将设置为最后一个移除的位,而溢出标志设置为0.
CMP指令根据他们的两个操作数之差来设置条件码,CMP与SUB指令的行为是一致的。
TEST指令与AND指令的行为是一致的。

3.6.2 访问条件码

SET指令的目的操作数是8个单字节寄存器元素之一,或者是一个字节的存储器位置,将这个字节设置成0或者1。
movzbl指令用来清零%eax的三个高字节。

3.6.3 跳转指令及其编码

jmp指令是无条件跳转,它可以是直接跳转,即跳转目标是作为指令的一部分编码的;也可以是间接跳转,即跳转目标是从寄存器或存储器位置中读出的。
程序计数器的值是跳转指令后面的那条指令的地址,而不是跳转指令本身的地址。

3.7.1 栈帧结构

为单个过程分配的那部分称为栈帧。
%esp:栈指针
%ebp:帧指针
栈指针可以移动,因此大多数信息的访问是通过栈指针的
3.7.2栈帧结构
call指令有一个目标,即指明被调用过程起始的指令地址,直接调用是一个标号,间接调用是“*”后面跟一个操作指示符。
call指令的效果是将返回地址入栈,并跳转到被调用过程的起始位置。
ret指令从栈中弹出地址,并跳转到这个位置。
%exa用来返回值
leave为返回值做好准备

代码托管

结对搭档

201555226

感想

因为我上学期汇编学的不够好导致理解困难。特别是看栈帧及递归调用这部分,虽然看了很多,但是还是不能很好地去理解运用。

学习进度条

代码行数(新增/累积) 博客量(新增/累积)
目标 5000行 30篇
第一周 6/6 1/1
第三周 150/156 2/3
第四周 77/233 1/4

参考资料

  • 《深入理解计算机系统V3》学习指导

转载于:https://www.cnblogs.com/zxm20/p/7709436.html

2017-2018-1 20155234《信息安全系统设计基础》第五周学习总结相关推荐

  1. 20135219洪韶武——信息安全系统设计基础第五周学习总结

    信息安全系统设计基础第五周学习总结 学习任务:教材第四章[处理器体系结构] 学习时间:10小时  一.教材知识点梳理[4.1-4.3] 1.ISA[指令集体系结构] 一个处理器支持的指令和指令的字节级 ...

  2. 20135203齐岳 信息安全系统设计基础第五周学习总结

    20135203齐岳 信息安全系统设计基础第五周学习总结 学习计时:共10小时 读书:5 代码:1 作业:2 博客:2 第四章 处理器体系结构 一.学习目标 本章内容是处理器体系结构,重点掌握ISA, ...

  3. 20135223何伟钦—信息安全系统设计基础第五周学习总结

    第三章 程序的机器级表示 一.历史观点 Intel处理器(X86) 二.程序编码 gcc -01 -o p p1.c p2.c ①编译选项-01 表示编译器使用第一级优化 ②编译选项-02 表示编译器 ...

  4. 信息安全系统设计基础第五周学习总结

    处理器的体系结构 ISA:一个处理器支持的指令和指令的字节级编码称为它的指令集体系结构ISA. Y86是一个指令体系结构(ISA)寄存器.存储器.条件码.PC.程序状态. halt:这个指令将会终止指 ...

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

    2017-2018-1 20155224 <信息安全系统设计基础>第九周学习总结 教材学习内容总结 存储器 随机访问存储器(RAM): 静态RAM:用来作为高速缓存存储器,每个位存储在一个 ...

  6. 2018-2019-1 20165206 《信息安全系统设计基础》第九周学习总结

    - 2018-2019-1 20165206 <信息安全系统设计基础>第九周学习总结 - 教材学习内容总结 计算机系统的主存被组织成一个由M个连续的字节大小的单元组成的数组.每个字节都有一 ...

  7. 20135203齐岳 信息安全系统设计基础第十三周学习总结

    20135203齐岳 信息安全系统设计基础第十三周学习总结 学习计时:8/9共小时(计划/实际) 读书:4/5 代码:1/1 作业:1/1 博客:2/2 第十二章 并发编程 一.学习目标 掌握三种并发 ...

  8. # 20155337 2017-2018-1 《信息安全系统设计基础》第一周学习总结

    20155337 2017-2018-1 <信息安全系统设计基础>第一周学习总结 教材学习内容总结 1.1信息就是位+上下文 hello.c程序是以字节序列的方式储存在文件中的.每个字节都 ...

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

    20145227<信息安全系统设计基础>第一周学习总结 学习内容总结 Linux是一个操作系统.如果使用GUI,Linux和Windows没有什么区别.Linux学习应用的一个特点是通过命 ...

  10. 2018-2019 20165203 《信息安全系统设计基础》第一周学习总结

    2018-2019-1 20165203 <信息安全系统设计基础>第一周学习总结 教材学习内容总结 编译:gcc [选项] [文件名] 选项参数表 参数 对应功能 -E 仅执行编译预处理 ...

最新文章

  1. NYOJ 860 又见01背包
  2. CVPR 2020 | CentripetalNet:目标检测新网络,COCO 48 % AP超现所有Anchor-free网络
  3. 有关多核一致性的理解和思考
  4. Java IO篇:什么是 Proactor 网络模型?
  5. c语言子查询返回子菜单,T-SQL基础(三)之子查询与表表达式
  6. ios 计算两个时间相差秒数_Ios中时间差的计算,NSData与NSCalendar(日历)对象
  7. security NO.1
  8. Mysql不能远程连接的解决方法
  9. 资源放送丨《 Kubernetes Operator 开发范式》PPT视频
  10. 【极客思考】计算机网络:Wireshark抓包分析TCP中的三次握手与四次挥手
  11. FinCEN就非托管加密钱包报告规则征集意见时间将截至今日12时59分
  12. java在线打开xml文件_java实现简单解析XML文件功能示例
  13. [转]vc6.0安装boost1.34.1
  14. deepin mysql管理工具_[LINUX]DeepIn下基础开发环境搭建
  15. 常用c语言代码大全,C语言的一些常用代码
  16. 《概率论与数理统计》(浙大第四版)第四章总结笔记(纯手写)
  17. 数据库:简述对数据库的认识
  18. CAN报文解析—案例
  19. 语聊房玩法解析,如何快速打造一款语音社交产品
  20. ubuntu安装Google输入法

热门文章

  1. 不使用临时表,仅使用select实现查询出多行常数
  2. jsp与servlet之间页面跳转及参数传递实例
  3. ASP.NET 的数据绑定,DataList,Repeater 的绑定示例
  4. View工作原理(一)事件传递原理详解
  5. 对抽象工厂+反射+配置文件的实例理解
  6. 抽象工厂+反射+依赖注入 实现对数据访问层和业务逻辑层的优化
  7. css教程之列表属性
  8. 从JAVA转学习Go——Go在eclipse的环境搭建
  9. LeetCode --Search Insert Position
  10. LWIP源码结构分析