您的位置:首页 > 理论基础

深入理解计算机系统笔记

2013-06-22 18:38 225 查看
第一章

用了一个小时看 《深入理解计算机系统》第一章。虽然通过之前的逆向,汇编等底层知识的学习,这些知识大部分都是掌握之中了,但是读了之后还是有一种

豁然开朗的感觉,觉得之前积累的零零散散的知识被梳理了一遍,这是本好书,继续学习!

第二章

浮点运算有完全不同的数学属性。虽然溢出会产生特殊的值+∞,但是一组正数的乘积总是正的。

自己写个小程序

#include <Stdio.h>

int main()
{
float flow;
float normal=999.999*888.888;
scanf("%f",&flow);
flow=flow*normal;
printf("you never get here %f",flow);
printf("\n");
return 0;
}
在scanf执行时输入一个超大的浮点数,flow的值变为7F800000

用printf输出flow就会显示字符串1.#INF00,大概就是所说的   特殊的值+∞   了吧

后面有一段文字被译者翻译得有点傻逼,我觉得他翻译的傻B,当然你也可以觉得我翻译得更傻逼。。

当值x是2的非负整数幂时,也就是...(方便后人搜索)

大概就是说二进制和十六进制之间的窍门,如一个十六进制数等于2的5次方,那么写成二进制就是1后面跟5个0,即100000B(二进制)=20H(十六进制)=32D(十进制)

就是说2的n次方,写成二进制就是2后面跟n个0,书上还说如果将n表示为i+4j (0<=i<=3), 转换起来更方便,如2的11次方 中的11=3+2*4,那么它的十六进制形式就是

2的三次方的2*4次方,也就是8的8次方,就是8后面要跟8个0(二进制的0),那么十六进制上就要跟2个0,所以十六进制表示为800H

后面讲到十六进制与十进制的互转。

十进制转十进制是不断地用商除16,直到商为0,然后余数按最后一次除法到第一次除法的顺序念就是十六进制了

十六进制转十进制就是,例:7AF=7*16的2次方  +  10* 16的1一次方  +  15*16的0次方   =   1967

后面说大小端,一般Intel用的是小端,IBM和Sun用的是大端,不过也不一定全是啦。考虑一个数0x12345678,     12那个位置叫最高有效位       78那个位置在最低有效位

小端方式的存储会将低有效位放在前面,高有效位放在后面,所以我们在用OD逆向的时候看到一个句柄如此存放在0x403000的时候(9A2C321F),其实真正的句柄值是1F322C9A.  为什么字节存储方式要叫做大端小端(respectively big endian and little endian)这么奇怪,  其中故事比较傻逼, 这里就不引用了。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: