深入理解計算機系統筆記

第一章

用了一個小時看 《深入理解計算機系統》第一章。雖然通過之前的逆向,彙編等底層知識的學習,這些知識大部分都是掌握之中了,但是讀了之後還是有一種

豁然開朗的感覺,覺得之前積累的零零散散的知識被梳理了一遍,這是本好書,繼續學習!


第二章

浮點運算有完全不同的數學屬性。雖然溢出會產生特殊的值+∞,但是一組正數的乘積總是正的。

自己寫個小程序

#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)這麼奇怪,  其中故事比較傻逼, 這裏就不引用了。。



發佈了50 篇原創文章 · 獲贊 2 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章