《系统级程序设计》——重点&汇编上手

2019-01-05  本文已影响589人  CSDN_georgeChen

1.这是我根据我的印象抽取的重点,希望不要奶死了。
2.里面有看汇编代码的迅速上手,如果要熟练,请一定要完成几个书上的汇编逆向出代码的题目。

cmp是最常用的
比如 cmp a,b
就做b - a的运算,并且将结果暂存。

接着就需要条件跳转语句jmp

j代表跳转
后面可以接以下字母以及他们的组合
g(great): >
a (above) : >
e (equal) : =
l (less) : <
b (below) : <

eg组合:jle .L1(如果less equal <= 则跳转到L1)

用法
test x,x
comvns a,b
如果x不为负数,(则取前面的)即为a = a
若x为负数,则 a = b
//类似于C语言 a>=0?a:b;

struct结构类型
同理可按照数据大小进行连续排列
eg
strcut test
{
char c;
int I;
double d;
}
那么 那么d就在test偏移为5(sizeof int 和 char)的地方。

但是,在有一些操作系统中,会有数据对齐的要求。
要求:一个数据的首地址应该为该数据大小的整数倍,结尾也是。
因此上述例子就不正确了,因为char占1B
i就不能紧接着c存储,而必须空出3位,到从地址为4的地方开始到8结束(地址从0开始计算),而8正好为double的倍数,所以可以直接开始存储d。
此时d相对于test偏移量就不再是5了,而是8。


3

现代操作系统对缓冲区溢出攻击的防范机制:


4

表示处理器性能的参数
延迟:完成运算所需的时间
发射时间:两个连续通类型的运算之间所需要的最小周期数
容量:能够执行该运算的功能单元数量
/*
大概可以理解为,一辆赛车有氮气加速,延迟代表一罐氮气喷完所需时间,发射时间代表,一罐氮气的充气时间,容量代表你有几个气罐子。
*/
eg
一款处理器
加法:延迟:3周期,发射时间:1周期,容量:2
需要做两个加法运算
如果两个加法相互独立,正好有容量为2,那么他们可以同时运算,则CPE = 3
如果,两个加法之间有数据依赖:比如 a = b + a; a = a + a;那么必须先等第一个做完(花费3周期),再另外一个做(花费3周期)总共是6周期。
//注意这里加法单元容量为2

如果容量改为1:
先等第一个做完(花费3周期),准备(花费发射1周期),再另外一个做(花费3周期)总共是7周期。

上一篇 下一篇

猜你喜欢

热点阅读