2019-2020-1 20175325 《信息安全系统设计基础》第三周学习总结
一、目录:
- 学习内容:程序的机器级表示
- 代码调试中的问题和解决过程
- 上周错题
- 代码托管
- PSP
二、学习内容:程序的机器级表示
- 汇编语言是面向处理器的语言,是机器指令的一种符号。
- 使用gcc编译器生成汇编代码:
gcc -Og -s xxx.c
- 查看二进制文件的反汇编代码:
objump -d xxx.c
- 运行GCC编译器产生一个汇编文件code.s:
gcc -Og -S code.c
- 使用-c命令选项,GCC编译并汇编该代码得到code.o:
gcc -c code.c
- 生成汇编文件:
gcc -Og -S mstore.c
- 查看文件内容即反汇编:
objdump -d mstore.o
- 处理器类型:
- 程序计数器:
(%rip)
指示将要执行的下一条指令在存储器中的地址。- 整数寄存器:包含16个命名位置,分别存储64位的值。有的用来记录某些文件的状态,有的用来保存临时数据。
- 条纹寄存器:保存最近执行的算数或逻辑指令的状态信息。
- 浮点寄存器:可以存放一个或多个整数或者浮点数。
-
有效地址的计算方式 :
Imm(Eb,Ei,s) = Imm + R[Eb] + R[Ei]*s
-
数据传送指令
MOV
:
-
加载有效地址
leaq
指令:实际上是movq
指令的变形 -
操作数指示符:
-
立即数(Imm):表示常数值
$
用标准C表示法表示的整数 -
寄存器:表示某个寄存器的内容
R[ra]
-
内存引用:访问某个内存位置
Mb[Addr]
-
特殊的几个算术操作:
- imulq 有符号全乘法
- mulq 无符号全乘法
- clto 转换为八字
- idivq 有符号除法
- divq 无符号除法
- 缓冲区溢出:当计算机向缓冲区内填充数据位数时超过了缓冲区本身的容量溢出的数据覆盖在合法数据上,理想的情况是程序检查数据长度并不允许输入超过缓冲区长度的字符,但是绝大多数程序都会假设数据长度总是与所分配的储存空间相匹配
- 压入和弹出栈数据:
pushq S:压入栈
popq D:弹出栈
- 转移控制——
call
和ret
指令的一般形式:
三、代码调试中的问题和解决过程
- 问题与解决方案:
四、上周错题:
-
错题一:
-
解答:
p49, 有符合数和无符号数的转换,值不同,位模式不变,要深入理解“信息=位+上下文”。 -
错题二:
-
解答:
p39 注意区分逻辑运算和位运算。
五、代码托管:
六、PSP:
|| ——----| 代码行数| 博客量| 学习时间|
|------| ------ | ------ | ------ |
| 目标 | 5000|25篇|400小时| |
|第三周 | 198/228|2/3 |12/20| |