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

课堂笔记

宿主机(x86):linuxhello >gcc
目标机->实验箱:armhello   >arm-gcc
交叉编译
程序->进程。
操作系统:并发的系统。硬件:CPU,内存,IO设备
linux、unix操作系统:输入输出被放在操作文件中。
操作系统:虚拟内存、进程、文件
nfs 宿主机ip/d /d
>man -k
>grep -nr

教材学习

1.程序编码

一个C语言程序需要经过四个阶段才能变成一个可执行的二进制代码。

  • 预处理阶段:预处理器cpp根据编译文件以“#”开头的命令,读取系统头文件stdio.h(.h结尾的表示头文件,.c表示可执行文件)的内容,并把它插入到程序文本中,得到一个新的文件。
  • 编译阶段:编译器ccl将预处理后的文件翻译成.s结尾的文本文件,里面包含一个汇编程序。(linux命令:gcc -Og -s hello.c)
  • 汇编阶段:汇编器ss将汇编 程序翻译成二进制的机器语言,并把结果保存在以.o结尾的二进制文件中。(linux命令:gcc -Og -c hello.c)
  • 链接阶段:链接器ld将程序用到的C语言类库的函数汇编后的代码合并到hello.o,得到可执行的目标文件。(linux命令:gcc -o hello hello.c)
  • 对二进制文件进行反编译:objdump -d hello.o

2.数据格式

  • 由于是从16位体系结构扩展成32位,intel用术语字(word)表示16位数据类型,因此32位为双字(double words),64位数为4字(quad words)。
  • 以下是比较容易模糊的数据类型大小:

32位机上:float 4 long int 4 double 8 longlong 8 char* 4 unsigned long 4

64位机上:float 4 long int 8 double 8 longlong 8 char*8 unsigned long 8

另外,GCC 用long double表示扩展精度(10字节),出于存储器性能考虑,会被存储为12字节


3.访问信息

操作数指示符

大多数指令有一到多个操作数,操作数有三种:

  • 立即数:即常数值
  • 寄存器:表示某个寄存器内容
  • 存储器引用:根据计算出来的地址(通常称有效地址)访问某个存储器位置
  • 因此寻址方式也有多种,如:立即数寻址、寄存器寻址、绝对寻址、间接寻址、变址寻址、伸缩化的变址寻址。

数据传送指令

几个重要数据传送指令:mov族(之所以称这为族是因为mov指令还有很多兄弟指令如movb、movw、movsb、movzb,这是我个人对它们的称呼,便于记忆mov其他几个比较低调的兄弟)、pop、push。

另外,对于mov族,movb、movw自不必做过多解释,movsb、movzb分别为符号扩展、零扩展,它们只拷贝一个字节,源操作数均为单字节,并设置目的操作数中其余的位,效果如下:

初始假设:%dh=8D %eax=98765432
- 1.movb %dh,%al;%eax=9876548D
- 2.movsbl %dh,%eax;%eax=FFFFFF8D(目的操作数高24位设为源字节最高位,在这里为很显然为1,所以前24位为全F)
- 3.movzbl %dh,%eax;%eax=0000008D(目的操作数高24位被设为0)
对于pushl指令等价于:
 subl $4,%esp
movl %ebp,(%esp) //注意这里的括号引起的差别
popl指令等价于:
 movl (%esp),%eaxaddl $4,%esp

4.控制

循环

C语言提供了多种循环结构,即do-while、while和for。汇编中用条件测试和跳转结合起来实现。大多数汇编器根据一个循环的do-while形式来产生循环代码,即使do-while的形式用得相对较少。其他的循环会首先转换成do-while形式,然后再编译成机器代码。首先从do-while开始。

do-while循环

do-while的通用形式可以翻译成如下所示的条件和goto语句:

loop:body-statementt=test-expr;if(t)goto loop;

每次循环,程序会执行循环体内的语句,然后执行测试表达式。如果测试为真,则回去再执行一次循环。

while循环

将while循环翻译成机器代码有很多种方法,常见的是使用条件分支,在需要时省略循环体的第一次执行,从而将代码转换成do-while循环,如下:

if(!test-expr)goto done;
dobody-statementwhile (test-expr);
done:

接下来,这个代码可以直接翻译成goto代码,如下:

    t=test-expr;if(!t)goto done;
loop:body-statementt=test-expr;if(t)goto loop;
done:
for循环

for循环可以很容易转换成while循环,进而转换成do-while形式:

init-expr;
if(!test-expr)goto done;
do {body-statementupdate-expr;
} while (test-expr);
done:

然后,将它转换成goto代码:

    init-expr;t=test-expr;if(!t)goto done;
loop:body-statementupdate-expr;t=test-expr;if(t)goto loop;
done:

代码调试中的问题和解决过程

  • 问题1:

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 20篇 400小时
第一周 100/100 1/1 5/5
第二周 100/200 2/3 5/10
第三周 100/300 2/5 5/15
第四周 100/400 1/6 5/20

代码托管


参考资料

程序的机器级表示

转载于:https://www.cnblogs.com/bonsai/p/7711471.html

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

  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. GoldenGate字段和数据筛选
  2. python是用c写的吗-python是用c写的吗
  3. android后台文件下载库,android中如何下载文件并显示下载进度
  4. springmvc拦截器无法拦截jsp
  5. BeetleX网关自定义请求日志插件
  6. 英语口语 week14 Friday
  7. 最近任务 react文章列表
  8. 七款顶级HTML5编辑器带你飞
  9. 小米路由器 mini 有线中继设置教程
  10. kafka消费者理解
  11. Linux Kernel Security全景图系列之开篇
  12. 计算机图形学 构成立方体数据结构的简单表结构,计算机图形学-沈工大作业管理ppt课件...
  13. 注意!出现这十种症状,说明你不适合做程序员
  14. 各代iPhone iPad 内部代号
  15. 癌症与各种微量元素的关系
  16. 生产力 生产关系 生产工具_破坏生产力的5种方法
  17. 使用Spark中DataFrame的语法与SQL操作,对人类数据进行处理,比较学历与离婚率的关系
  18. R语言绘图中图片的组合(cowplot、patchwork宏包、layout、par()、gridExtra)
  19. 移植0.96四针脚OLED程序到msos系统
  20. Qt使用导出类报错:error C2491: “LmcThreadPaddle::staticMetaObject”: 不允许 dllimport 静态数据成员 的定义

热门文章

  1. ffmpeg 花屏的问题
  2. cmakefile 基础篇
  3. linux删除php文件权限不够,linux - 用php的exec()删除目录文件提示权限不够
  4. 透明怎么弄_玻璃球里的花纹是怎么弄进去的?谜终于解开了!
  5. 初识openwrt(上)
  6. Oracle里面的用户user无法登录 LOCKED(TIMED)
  7. Hibernate无法自动建表的缘故
  8. 链接随机html,通过Javascript/HTML生成随机链接
  9. 【java】RMI教程:入门与编译方法 远程
  10. 【Flink】Flink Max 和 MaxBy的区别