标签:
理解函数调用栈帧的概念,并能用GDB进行调试
ISA:定义了处理器状态,指令的格式,每条指令对状态的影响。
gcc -O1 -S text.c
使用gcc产生一个汇编文件code.s,可以使用vim查看
gcc -O1 -c text.c
使用gcc产生目标代码文件。从中可知及其实际执行的程序只是对一系列指令进行编码的字节序列。
objdump -d test.o
不同数据的汇编代码的数据
字节 b 1
字 w 2
双字/双精度 l 4/8
单精度 s 4
拓展精度 t 10/12
操作数三种类型
movl类
add类
这些操作被分为四组:加载有效地址、一元操作、二元操作和移位
leal指令
若%eax存储x,leal 7(%edx,%edx,4) 是将%eax的值设置委5x+7
jump指令可以改变一组机器代码指令的执行顺序。
条件码寄存器:描述了最近的算数或逻辑操作的属性
一个过程调用包括将数据和控制从代码的一部分传递到另一部分。另外,它还必须在进入时为过程的局部变量分配空间,并在退出时释放这些空间。
I32程序用程序栈来支持过程调用
机器用栈来传递过程参数,存储返回信息,保存寄存器用于以后恢复,以及本地存储。
call
call指令有一个目标,即指明被调用过程起始的指令地址,调用可以是直接的也可以是间接的
call指令效果是将返回地址入栈,并跳转到被调用过程的起始处。
ret
ret指令从栈中弹出地址,并跳转到这个位置。栈指针要指向前面call指令所存储返回地址的位置。
寄存器%eax、%edx和%ecx被划分委调用者保存寄存器(P调用Q时,Q可以覆盖这些寄存器,而不会破坏P所需的任何数据
寄存器%ebx、%esi和%edi被划分委调用者保存寄存器(Q必须在覆盖这些寄存器的值之前将他们保存在栈中)
本周解决了git推送代码的问题,并且成功将代码推送至开源中国。
一开始不知道什么原因,不能push,再我不断尝试后终于成功了
本周学习了深入理解计算机系统第3章的知识,本章学习的内容主要是学习计算机的汇编语言。认识计算机如何将c语言程序转换为汇编语言,然后再将汇编语言转换为机器语言。在学习本章时还是觉得学习进程很缓慢,有时在一个知识点需要停留很久才能搞懂,以后还得多加练习,勤能补拙。
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第二周 | 0/0 | 1/2 | 19/20 | |
第三周 | 80/80 | 1/3 | 25/44 | |
第四周 | 110/190 | 1/4 | 23/67 | |
第五周 | 60/250 | 2/6 | 26/93 |
20145336张子扬 《信息安全系统设计基础》第5周学习总结
标签:
原文地址:http://www.cnblogs.com/20145336yang/p/5968243.html