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

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

一 教材内容总结

程序编码

  • 程序计数器:在IA32中通常称作pc,用%eip表示,指示即将执行的下一条指令在存储器中的地址
  • 整数寄存器:包含8个命名的位置,分别存储32位的值,这些寄存器可以存储地址或者数据
  • 条件码寄存器:保存最近执行的算术或者逻辑指令的状态信息,用来控制数据或者数据流中的变化
  • 一组浮点寄存器:存放浮点数据
  • 程序存储器:包括程序的可执行机器代码,操作系统需要的一些信息,存储器块
  • ATT格式:gcc生成代码格式中以‘.’开头的都是指导汇编器和链接器的命令 ,与我们以往学习的x86汇编格式相比,mov等命令的指向相反,即mov a, b为a->b

数据格式

  • 字节:8bit(char)
  • 字:16bit(short)
  • 双字:32bit(int , long int, char *)
  • 数据传送指令一般分三种:movb,movw,movl(b后缀代表字节,w后缀代表字,l后缀代表双字)

数据传送指令

  • movb,movw,movl(b后缀代表字节,w后缀代表字,l后缀代表双字)
  • movsbw(字节转字),movsbl(字节转双字),movswl(字转双字)
  • movzbw(零拓展字节转字),movzbl(零拓展字节转双字),movzwl(零拓展字转双字)
  • 压栈和出栈都是以双字为单位,pushl, popl

算术和逻辑操作

  • 操作符与汇编命令大致相同
  • 循环,在机器码中for、do..while,while都会先转换成do..while的形式再编译成机器码

过程

  • 栈帧结构
    • %ebp为帧指针,%esp为栈指针
    • 程序执行时,栈指针可以移动,因此大多数信息的访问都是相对于帧指针的
    • 过程P调用过程Q时,p的返回地址被压入栈中,形成p的栈帧的末尾,后面保存其他寄存器的值
    • call指令:将返回地址入栈,并跳转的被调用的过程起始处,因此,返回地址是在程序中紧跟在call后面的指令的地址
    • ret:从栈中弹出地址,并跳转到这个位置
    • level:可以使栈做好返回准备
    • %eax,%edx,%ecx划分为调用者保存寄存器,%ebx,%esi,%edi划分成被调用者保存寄存器

二 课后练习

  • p107的代码实践:

  • gcc -S code.c编译得到汇编代码

  • gcc -c code.c得到反汇编代码,并且通过object dump查看

三 代码托管

心得体会

这次学习的重点其实和以前的汇编是相通的,在学习之前温习上学期的汇编知识,但是x86汇编和今天的att格式还是有一些区别的,比较不同之处,参考相同之处学习感觉更有效率

posted on 2016-10-16 23:10  20145319钟轲  阅读(165)  评论(1编辑  收藏  举报