20145240 《信息安全系统设计基础》第三周学习总结
20145240 《信息安全系統(tǒng)設計基礎》第三周學習總結
教材學習內(nèi)容總結
p20
三種數(shù)字:
無符號數(shù):基于傳統(tǒng)二進制表示法,表示大于或者等于零的數(shù)字。
補碼:表示有符號整數(shù)的最常見方式。
浮點數(shù):表示實數(shù)的科學計數(shù)法的以二為基數(shù)的版本。
為什么會產(chǎn)生漏洞?
- 計算機運算的漏洞多由于計算機算數(shù)運算的微秒細節(jié)引發(fā)的。
p22
進制轉化:
- x=2^n轉化為十六進制
將x寫成x=2^n的形式,令n=i+4j,x的十六進制表示為:開頭為2^i的值,后面補j個0。
- 十進制轉化為十六進制
十進制數(shù)x反復除以16,得十六進制數(shù)
- 十六進制轉化為十進制
十六進制數(shù)x反復乘以16,得十進制數(shù)
p25
- gcc -m32 可以在64位機上(比如實驗樓的環(huán)境)生成32位的代碼
p26
字和字節(jié)順序:
- 字長:一個字長指明整數(shù)和指針數(shù)據(jù)的標稱大小。字長決定最重要的系統(tǒng)參數(shù)就是虛擬地址空間的最大大小。對一個字長為w位的機器而言,虛擬地址的范圍是0~2^w-1,程序最多訪問2^w個字節(jié)。
對于跨越多字節(jié)的程序?qū)ο笮杞蓚€規(guī)則:
小端法:高對高,低對低
大端法:從視覺上,是這次閱讀的順序,與小端法相反。 使字節(jié)順序變得可見的三種方式: 不同類型的機器之間通過網(wǎng)絡傳送二進制數(shù)據(jù)時,網(wǎng)絡應用程序的代碼編寫必須遵守已建立的關于字節(jié)順序的規(guī)則;使用反匯編器,處理整數(shù)數(shù)據(jù)的字節(jié)序列的存儲字節(jié)順序問題;當編寫規(guī)避正常的類型系統(tǒng)的程序時。
p28
p32
位向量的運算:按位運算
位向量的應用:表示有限集合
掩碼表示的是設置為有效信號的集合。位級運算
|:或 &:與 ~:取反 ^:異或邏輯運算
邏輯運算符:||(或)、&&(與)、!(非) 邏輯運算認為所有非零的參數(shù)都表示TRUE,參數(shù)0表示FALSE。返回1或者0,分別表示結果為TRUE或FALSE。
邏輯運算和位級運算的區(qū)別是:
按位運算只有在特殊情況下,即參數(shù)被限制為0或者1時,才能與其對應的邏輯運算有相同的行為; 若第一個參數(shù)求值就能確定表達式的結果,那么邏輯運算符就不會對第二個參數(shù)求值。移位運算
左移k位:丟棄最高位的k位,右端補k個0 右移包括:邏輯右移、算數(shù)右移 邏輯右移:左端補k個0(常用于無符號數(shù)) 算數(shù)右移:左端補k個最高有效位的值(用于有符號數(shù))
p33
- 掩碼是位運算的重要應用,對特定位可以置一,可以清零。
p38
- 要用C99中的“l(fā)ong long”類型,編譯時要用gcc -std=c99
p39
補碼形式是最常見的有符號數(shù)的計算機表示方式:
將字的最高有效位解釋為負權 B2T(W)函數(shù)為:B2T(x) = -x(w-1)2^(w-1)+∑xi2^i(求和從i=0到i=w-2)
p44
有符號數(shù)和無符號數(shù)之間的轉換:
- 處理同樣字長的有符號數(shù)和無符號數(shù)之間相互轉換的一般規(guī)則:
數(shù)值可能會改變,但是位模式不變。
c語言允許無符號數(shù)和有符號數(shù)之間的轉換。轉換的原則是底層的位表示不變。
當從無符號數(shù)轉換為有符號數(shù)是,效果是應用函數(shù)U2T,從有符號數(shù)轉化為無符號數(shù)時,應用函數(shù)T2U,其中w表示數(shù)據(jù)類型的位數(shù)。
負數(shù)和正數(shù)相等的情況:u=2147483648 =-2147483648
(當輸出分別為無符號形式和有符號形式時)
p48
怎么樣讓負數(shù)等于正數(shù)?
- 在負數(shù)x后加上U,可以使其轉換為(2^w+x)
p49
擴展數(shù)的位表示:
零擴展:將無符號數(shù)轉換為更大的數(shù)在表示的開頭添加0
符號擴展:將一個補碼數(shù)字轉換為一個更大的數(shù)據(jù)類型
p52
深入思考一下代碼和結果:
length=0時會出現(xiàn)存儲器錯誤,這是因為參數(shù)length是無符號的,計算0-1將進行無符號運算,等價于模數(shù)加法,結果得到UMax。因為任何數(shù)都是小于等于UMax的,所以<=比較總是為真,代碼將訪問數(shù)組a的非法元素。
解決辦法:
1.將length聲明為int類型 2.將for循環(huán)測試條件改為i>lengthp67
整數(shù)運算
無符號加法
無符號運算可以被視為一種模運算形式,無符號加法等同于計算和摸上2^w,可以通過簡單的丟棄x+y的w+1位表示的最高位,來計算這個數(shù)值。 一個算數(shù)運算的溢出,是指完整的整數(shù)結果不能放到數(shù)據(jù)類型的字長限制中去。補碼加法
兩個數(shù)的w位補碼之和與無符號之和有完全相同的位級表示。大多數(shù)計算機用相同的機器指令來執(zhí)行無符號或者有符號加法。補碼的非
對于范圍-2^(w-1)≤x<-2^(w-1)內(nèi)的x,補碼的非運算如下:
x=-2^(w-1):補碼的非為-2^(w-1)x>-2^(w-1):補碼的非為-x求位級補碼非的方法:
對每一位求補,再對結果加1 建立在將位向量分為兩部分的基礎之上的無符號乘法
兩個數(shù)x、y相乘且x、y的位數(shù)為w,則結果的位數(shù)為2w。補碼乘法
同無符號乘法。 若為截斷后的結果,則取結果的后w位作為計算結果。注意:無符號運算和補碼運算在“+”、“-”、“*”在位級上有相同的結果。關于整數(shù)運算的最后思考
計算機執(zhí)行的“整數(shù)”運算實際上是一種模運算形式;表示數(shù)字的有限字長限制來了可能的值的取值范圍,運算結果可能溢出;補碼表示提供了一種即能表示負數(shù)也能表示正數(shù)的靈活方法,同時使用了與執(zhí)行無符號算術相同的位級實現(xiàn); c語言中的unsigned數(shù)據(jù)類型的使用也應當特別注意,比如,在書寫整數(shù)常數(shù)和調(diào)用庫函數(shù)的時候。
p67
浮點數(shù):
- 二進制小數(shù)
將十進制小數(shù)轉換為二進制小數(shù) :
首先,將十進制小數(shù)寫成分數(shù)的形式,將分數(shù)的分子部分,寫成二進制的形式;將分數(shù)的分母部分寫成2^n的形式,將分子的二進制形式,從右往左數(shù),數(shù)n位添加小數(shù)點。
小數(shù)點左移:除以2 小數(shù)點右移:乘以2- IEEE浮點數(shù)表示
表示形式為:V = (-1)^s * M * 2^E
符號:s決定這個數(shù)是負數(shù)(s = 1)還是正數(shù)(s = 0),而對于數(shù)值0的符號位解釋作為特殊情況處理。
尾數(shù):M是一個二進制小數(shù),它的范圍是1 ~ 2-ε,或者是0 ~ 1-ε。
階碼:E的作用是對浮點數(shù)據(jù)加權,這個權重是2的E次冪(可能是負數(shù))。
根據(jù)階碼的值,可分為一下三種情況:
情況一:規(guī)格化的值 (當階碼字段不全為0或全為1時) E = e-Bias Bias = 2^(k-1)-1 M = 1+f 情況二:非規(guī)格化的值 (當階碼字段全為0時) E = 1-Bias Bias = 2^(k-1)-1 M = f情況三:特殊值 (當階碼字段全為1時) 當小數(shù)域全為0時, 當s=1時,為-∞;當s=0時,為+∞。 當小數(shù)域不全為0時,為NaN。- 浮點數(shù)的舍入
有四種情況分別是:
向偶數(shù)舍入(默認)向零舍入向下舍入向上舍入浮點運算
浮點加法:不滿足結合性、滿足單調(diào)性 浮點乘法:不滿足結合性、滿足單調(diào)性,在加法上不滿足分配性
教材學習中的問題和解決過程
課后練習題
練習題2.4
0x503c+0x8 = 0x5044 0x503c-0x40 = 0x4ffc 0x503c+64 = 0x50a1 0x50ea-0x503c=0xae練習題2.6
寫出0x00359141、0x4a564504的二進制表示:
0x00359141 = 0000 0000 0011 0101 1001 0001 0100 0001 0x4a564504 = 0100 1010 0101 0110 0100 0101 0000 0100- 練習題2.8
a = [01101001],b = [01010101]。計算:
~a = [10010110] ~b = [10101010] a&b = [01000001] a|b = [01111101] a^b = [00111100]本周代碼托管鏈接
http://git.oschina.net/20145240lsj/lsj20145240/tree/master/
學習進度條
| 目標 | 5000行 | 30篇 | 400小時 | |
| 第一周 | 200/200 | 1/1 | 20/20 | |
| 第二周 | 300/500 | 1/2 | 18/38 | |
| 第三周 | 200/7 00 | 1/3 | 22/60 |
參考資料
- 《深入理解計算機系統(tǒng)V2》學習指導
- ...
轉載于:https://www.cnblogs.com/20145240lsj/p/5928166.html
總結
以上是生活随笔為你收集整理的20145240 《信息安全系统设计基础》第三周学习总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据结构-直接寻址表
- 下一篇: 【读书笔记《Bootstrap 实战》】