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

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

教材学习内容总结

机器级代码

计算机系统使用了多种不同形式的抽象,对于机器级编程来说,其中两种抽象尤为重要:第一种是机器级程序的格式和行为,定义为指令集体系结构(ISA),第二种是机器级程序使用的存储器地址是虚拟地址,提供的存储器模型看上去是一个非常大的字节数组。反汇编我们可以用到:gcc -s或者obj dump -d。

在敲3.2.2代码示例时如果按照书上的敲就会提示我错误:

我们将-01去掉后便能编译它了:

但我们还是无法运行它,因为GCC运行编译器后,产生一个汇编文件code.s,但是不做其他进一步工作:

然后我们进一步编译它,会产生目标代码文件code.o,因为它是二进制格式,所以无法直接查看,二进制文件可以用od 命令查看,也可以用gdb的x命令查看。 有些输出内容过多,我们可以使用 more或less命令结合管道查看,也可以使用输出重定向来查看:

我想找到程序的字节表示,于是用到了GNU调试工具GDB,但它说没有符号表被读取:

最后可以通过反汇编器查看目标代码文件的内容:

所有以‘.’开头的行都是指导汇编器和链接器的命令。

ATT格式和Intel格式的区别

  1. Intel代码省略了指示大小的后缀。我们看到指令mov,而不是movl。
  2. Intel代码省略了寄存器名字前面的‘%’符号。用的是esp,而不是%esp。
  3. Intel代码用不同的方式来描述存储器中位置。

访问信息

esi edi可以用来操纵数组,esp ebp用来操纵栈帧。 对于寄存器,特别是通用寄存器中的eax,ebx,ecx,edx,32位的eax,16位的ax,8位的ah,al都是独立的。

数据的传送

  • 语句int x=*xp;表示我们将读存储在xp所指位置中的值,并将它存放到名字为x的局部变量中。这个读操作称为指针的间接引用。
  • 语句*xp=y;它将参数y的值写到xp所指的位置。这也是一种指针间接引用的形式,但是它表明的是一个写操作。

在运行117页书上示例时花了很多功夫,基本上是vim里面自己犯的一些错误,自己修改了无数次代码后总算弄出来了:

总之,指针就是地址,局部变量保存在寄存器中。

算术和逻辑操作

指令leal实际上是movl指令的变形,它的指令形式是从存储器读数据到寄存器,但实际上它没有引用存储器。leal指令下,目的操作数必须是一个寄存器。特别需要我们注意的是,如果涉及到减法,是目的操作数减去源操作数。移位操作移位量可以是立即数或%cl中的数。

控制

条件码通常不会直接读取,常用的使用方法有三种:

  1. 可以根据条件码的某个组合,将一个字节设置为0或者1
  2. 可以条件跳转到程序的某个其他的部分
  3. 可以有条件地传送数据

控制中最核心的语句:有条件跳转(实现if,switch,while,for),无条件跳转jmp(实现goto)。有条件跳转的条件看状态寄存器(教材上叫条件码寄存器), 注意leal不改变条件码寄存器。 SET指令根据t=a-b的结果设置条件码。

过程

数据传递、局部变量的分配和释放通过操纵程序栈来实现。机器用栈来传递过程参数、存储返回信息、保存寄存器用于以后恢复、以及本地存储。为单个过程分配的那部分栈称为栈帧。寄存器%ebp为栈指针,而寄存器%esp为栈指针。call指令有一个目标,即指明被调用过程起始的指令地址。call指令的效果是将返回地址入栈,并跳转到被调用过程的起始处。

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

在编译教材上code代码时,尝试了gdb,但好像没有什么作用。

还有一个问题就是自己做了实验楼的练习后尝试用gdb的一些frame等命令,但它都提醒我no stack,我不知道为什么。

本周代码托管截图

20145230/IS-design-20145230 - 码云 - 开源中国 http://git.oschina.net/20145230/IS-design-20145230

其他(感悟、思考等,可选)

通过本周的学习,我学会了认真地看书,第三章的内容很多,有一百多页书,要想马虎应付一会就能翻完,但那样你根本没有任何知识的印象,学习就要认真地学。我本周还结合了实验楼上的指导来学,感觉这样学起来要踏实一些吧,虽然很累,但自己也有所得,并不亏。然后我这周尝试用了ubuntu下安装了git,也用它上传了我的git文件,感觉很方便。总之,自己必须更加努力才能追上优秀同学的步伐!

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 2000行 20篇 400小时
第一周 2/2 20/20 初步了解Linux的一些基本命令
第二周 1/3 15/35 了解vim编辑器
第三周 86/86 1/4 25/60 了解了信息的表示和处理
第五周 79/79 1/5 30/90 了解了程序的机器级表示

参考资料

posted on 2016-10-16 20:34  20145230熊佳炜  阅读(191)  评论(4编辑  收藏  举报