20135219洪韶武-期中总结
一.第三章主要知识点
1.信息存储
*机器级程序将存储器视为一个非常大的字节数组,成为虚拟存储器;存储器的每个字节都由一个唯一的数字来标识,成为他的地址。
*十六进制表示法/十进制和十六进制转换
*排列表示一个对象的字节的两个通用规则:小端法/大端法
*字节变可见的三种情况
*C语言中字符串被编码为一个以null字符结尾的字符数组
*位级运算/逻辑运算/移位运算
2.整数表示
*整数数据类型表示有限范围的整数
*无符号编码,有符号编码,无符号数和有符号数之间转换
*C语言中无符号有符号数之间的转换原则:底层的位保持不变
*零扩展:在一个无符号数表示的开头添加0
*符号扩展:在表示中添加最高有效位值的副本
*无符号数的截断结果/补码数字的截断结果
3.整数运算
*无符号加法/补码运算
4.浮点数
*从二进制小数理解浮点数
*IEEE浮点格式标准:P70
*根据exp值,被编码的值可以分为三种情况
*舍入的关键问题是在两个可能值的中间确定舍入方向
*浮点运算
二.重点知识点理解(实验楼要求)
1.无符号数、有符号数(2进制补码)、浮点数,从逆向角度考虑为什么会产生漏洞?
任何漏洞产生都必然因为系统不可更改的局限性/无符号数、有符号数、浮点数的局限性/无符号数或者有符号数的表示范围有限,而浮点数虽然编码范围大,但是不精确
2.gcc -m32 可以在64位机上生成32位的代码
3.在C语言中,所有以0X或者0x开头的数字常量都常被认为是十六进制的值
4.字节顺序的两种表示方法:小端是“高对高、低对低”,大端与之相反
5.代码执行一下
6.文本数据比二进制数据具有更好的平台适应性。
7.将有符号数强转成无符号数之后,数字的数值发生改变,然而其位表示不变。
8.怎么样让负数等于正数?
在负数x后加上U,可以使其转换为(2^w+x)
9.零扩展类似于逻辑左(右)移
将一个无符号数转换为一个更大的数据类型,简单地在前面加上0。符号扩展类似于算数左(右)移。即:将一个补码数字转换为一个更大的数据类型,在表示中添加最高有效位值得副本。
10.整数与浮点数表示同一个数字的关系
整数与浮点数表示同一个数字时,化成二进制形式之后,可以看到,整数等于1 的最高有效位之后的数字,与浮点数小数部分的高位是相匹配的。
11.整数与浮点数转换规则
整数转换成二进制表示,然后小数点左移若干位得到规格化表示;取出小数部分的数值,在后面补0使其达到23位; 用frac加上偏置量得到的结果用二进制表示,放在取出的部分前面,再加上一个符号位即可。
二.第四章知识点
1.程序编码与机器级代码
程序编码:
gcc编译器,将源代码转化成可执行代码,C预处理器-汇编器-链接器
机器级代码:
机器级程序的格式和行为,定义【指令集体系结构ISA】,定义了处理器状态,指令格式,以及指令对状态的影响
机器级程序实用的存储地址使用的是虚拟地址
2.数据格式
整数型、长整数型存储为4字节格式
指针类型存储为4字节格式
浮点数有三种形式:单精度、双精度、扩展精度,分别为4字节、8字节、10字节
3.操作数指示符:
第一种是立即数,即常数值
第二种是寄存器,表示某个寄存器的内容
第三种是存储器,根据计算出的有效地址,访问存储器位置
4.操作数格式见课本P113【注意s因子必须是1、2、4或8】
5.数据传送指令:把不同指令分为指令类,同一类指令执行相同操作【不同的是操作数大小不同】
6.MOV类中的指令源操作数的值复制到目的操作数中【源操作数的指定的值是一个立即数,目的操作数指定一个位置】
7.栈是一个数据结构,可以添加或删除值,遵循后进先出原则。
8.加载有效地址【leal】:从存储器读数据到寄存器。
9.一元操作与二元操作
一元操作:只有一个操作数,既是源又是目的
二元操作:其中的第二个操作数既是元又是目的
10.移位操作:先给移位量,再给移位值,可以进行算术和逻辑右移。
11.条件码:寄存器,描述最近的算术或逻辑操作的属性。
最常用的条件码:CF【进位标志】,ZF【零标志】,SF【符号标志】,OF 【溢出标志】
12.注意:CMP指令和TEST指令不会修改任何寄存器的值,只设置条件码。
13.访问条件码:常使用三种方法P125
14.三种循环【do-while】【while】【for】
15.一个过程包括将数据和控制从代码的一部分传到另一部分,在进入时为过程的局部变量分配空间,并在退出时释放空间。
16.栈帧结构:为单个过程分配的那部分栈称为【栈帧】
程序执行时,栈指针可以移动,大多数信息访问都是针对于帧指针的
17.转移控制:call指令、leave指令、ret指令P150
18.递归过程P156.程序编码与机器级代码
程序编码:
gcc编译器,将源代码转化成可执行代码,C预处理器-汇编器-链接器
机器级代码:
机器级程序的格式和行为,定义【指令集体系结构ISA】,定义了处理器状态,指令格式,以及指令对状态的影响
机器级程序实用的存储地址使用的是虚拟地址
2.数据格式
整数型、长整数型存储为4字节格式
指针类型存储为4字节格式
浮点数有三种形式:单精度、双精度、扩展精度,分别为4字节、8字节、10字节
3.操作数指示符:
第一种是立即数,即常数值
第二种是寄存器,表示某个寄存器的内容
第三种是存储器,根据计算出的有效地址,访问存储器位置
4.操作数格式见课本P113【注意s因子必须是1、2、4或8】
5.数据传送指令:把不同指令分为指令类,同一类指令执行相同操作【不同的是操作数大小不同】
6.MOV类中的指令源操作数的值复制到目的操作数中【源操作数的指定的值是一个立即数,目的操作数指定一个位置】
7.栈是一个数据结构,可以添加或删除值,遵循后进先出原则。
8.加载有效地址【leal】:从存储器读数据到寄存器。
9.一元操作与二元操作
一元操作:只有一个操作数,既是源又是目的
二元操作:其中的第二个操作数既是元又是目的
10.移位操作:先给移位量,再给移位值,可以进行算术和逻辑右移。
11.条件码:寄存器,描述最近的算术或逻辑操作的属性。
最常用的条件码:CF【进位标志】,ZF【零标志】,SF【符号标志】,OF 【溢出标志】
12.注意:CMP指令和TEST指令不会修改任何寄存器的值,只设置条件码。
13.访问条件码:常使用三种方法P125
14.三种循环【do-while】【while】【for】
15.一个过程包括将数据和控制从代码的一部分传到另一部分,在进入时为过程的局部变量分配空间,并在退出时释放空间。
16.栈帧结构:为单个过程分配的那部分栈称为【栈帧】
程序执行时,栈指针可以移动,大多数信息访问都是针对于帧指针的
17.转移控制:call指令、leave指令、ret指令P150
18.递归过程P156