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) 编辑 收藏 举报