信息安全系統設計基礎第七週期中總結

知識點總結

第一週程序員

命令行經常使用快捷鍵編程

按鍵vim

做用數組

Tab緩存

Ctrl+c安全

補全命令、目錄、命令參數網絡

強行終止當前程序less

Ctrl+d函數

鍵盤輸入結束或退出終端工具

Ctrl+s

暫定當前程序,暫停後按下任意鍵恢復運行

Ctrl+z

將當前程序放到後臺運行,恢復到前臺爲命令fg

Ctrl+a

將光標移至輸入行頭,至關於Home鍵

Ctrl+e

將光標移至輸入行末,至關於End鍵

Ctrl+k

刪除從光標所在位置到行末

Alt+Backspace

向前刪除一個單詞

Shift+PgUp

將終端顯示向上滾動

Shift+PgDn

將終端顯示向下滾動

輸入歷史命令

 

經常使用通配符

字符

含義

*

匹配 0 或多個字符

?

匹配任意一個字符

[list]

匹配 list 中的任意單一字符

[!list]

匹配 除list 中的任意單一字符之外的字符

[c1-c2]

匹配 c1-c2 中的任意單一字符 如:[0-9] [a-z]

{string1,string2,...}

匹配 sring1 或 string2 (或更多)其一字符串

{c2..c2}

匹配 c1-c2 中所有字符 如{1..10}

 

幫助命令:man

man手冊區段

區段

說明

1

通常命令

2

系統調用

3

庫函數,涵蓋了C標準函數庫

4

特殊文件(一般是/dev中的設備)和驅動程序

5

文件格式和約定

6

遊戲和屏保

7

雜項

8

系統管理命令和守護進程

要查看相應區段的內容,就在 man 後面加上相應區段的數字便可,如:

man 3 printf;

 

關鍵字檢索:man -k k1| grep k2 | grep 2…(等於apropos)

例如:

man -k ad;  #顯示man手冊中全部包含ad的命令或說明文件並列條顯示

 

查找命令find  find [path] [option] [action]

在指定目錄下搜索指定文件名的文件:

find /etc/ -name interfaces

 

時間參數:

-atime

最後訪問時間

-ctime

建立時間

-mtime

最後修改時間

 

n、+n、-n的區別:

-mtime n: n 爲數字,表示爲在n天以前的」一天以內「修改過的文件

-mtime +n: 列出在n天以前(不包含n天自己)被修改過的文件

-mtime -n: 列出在n天以前(包含n天自己)被修改過的文件

例如:

列出 home 目錄中,當天(24 小時以內)有改動的文件:

find ~ -mtime 0

 

newer file: file爲一個已存在的文件,列出比file還要新的文件名,例如:

列出用戶家目錄下比Code文件夾新的文件:

find ~ -newer /home/shiyanlou/Code

 

 

查找匹配字符串grep

grep [命令選項]... 用於匹配的表達式 [文件]...

例:搜索/home/shiyanlou目錄下全部包含"shiyanlou"的全部文本文件,並顯示出如今文本中的行號:

grep -rnI "shiyanlou" ~

 -r 參數表示遞歸搜索子目錄中的文件,-n表示打印匹配項行號,-I表示忽略二進制文件

 

查看環境變量中以"yanlou"結尾的字符串:

export | grep ".*yanlou$"

 

查找宏的值:

grep –nr 【宏名稱、全大寫】 /usr/include

其中-r表明遞歸查找,-n表明行數

 

基本指令

apt-get、cd、mkdir、cp(複製)、rm(刪除)、mv(移動、重命名)、rename(批量重命名)、cat(正序查看文件)、tac(倒序查看文件)、nl(添加行號並打印)、more和less(分頁查看)、zip、rar、tar、df(查看磁盤容量)、du(查看目錄容量)、wc(計數)、uniq(去重)、

 

 

第二週

1.vim的使用

(1)三種經常使用模式的切換:

經常使用模式:普通模式、插入模式和命令行模式。

普通→插入: i 或 a  插入→普通: Esc 或 Ctrl + [ 普通→命令行: :

命令行→普通:Esc

命令行模式下輸入wq ,回車後保存並退出

(2)進入:vim/vim 文件名.格式

(3)幫助

大寫「K」能夠用來查找函數的幫助信息:查看 man page,命令模式下,將光標放在函數名上,按"K"能夠直接察看 man page

 

2.gcc的使用

預處理:gcc –E hello.c –o hello.i;                        gcc –E調用cpp

編譯:gcc –S hello.i –o hello.s;               gcc –S 調用ccl

彙編:gcc –c hello.s –o hello.o;              gcc -c  調用as

連接:gcc hello.o –o hello ;                                 gcc -o  調用ld

 

3.調試工具gdb的使用

gdb program 啓動gbd

b 設斷點(4種斷點:行斷點、函數斷點、條件斷點、臨時斷點)

run 開始運行程序

bt 打印函數調用堆棧

p 查看變量值

c 從當前斷點繼續運行到下一個斷點

n 單步運行

s 單步運行

quit 退出gdb

display 跟蹤變量值的改變
until 跳出循環
finish 跳出函數
help 幫助

 

 

第三週

  1. 進制轉換
  2. 信息存儲(布爾代數、位級運算、邏輯運算、移位運算)
  3. 整數表示(無符號數編碼、有符號數編碼、轉換、擴展、截斷)
  4. 整數運算(無符號數、有符號數)
  5. 浮點數(IEEE表示、浮點運算)

 

 

第四周

基本指令

mov

push

傳送

壓棧

pop

出棧

Leal

加載有效地址

sal

算術左移fg

Shl

邏輯左移

sar

算術右移(補符號位)

shr

邏輯右移(補0)

mull

有符號乘法

imull

無符號乘法

divl

無符號除法

idivl

有符號除法

 

條件碼

CF:進位標誌

ZF:零標誌

SF:符號標誌

OF:溢出標誌

 

算術指令

ADD 加法指令 影響標誌位

ADC 帶進位加法指令 影響標誌位

INC 加一指令 不影響CF,影響別的標誌位

 

SUB 減法指令 影響標誌位

SBB 帶借位減法指令 影響標誌位

DEC 減一指令 不影響CF,影響其餘標誌位

NEG 求補指令 影響標誌位 只有操做數爲0,例如字運算對-128求補,OF=1,其餘時候OF=0

CMP 比較指令 作減法運算但不存儲結果,根據結果設置條件標誌位

 

MUL 無符號數乘法指令

IMUL 有符號數乘法指令   均對CF和OF位之外的條件碼位無定義(即狀態不定)

 

DIV 無符號數除法指令

IDIV 帶符號數除法指令 除法指令對全部條件碼位均無定義

 

位操做指令

AND 邏輯與

OR 邏輯或

NOT 邏輯非 不影響標誌位

XOR 異或

TEST 測試指令  

 

控制轉移指令

JMP 無條件轉移指令 不影響條件碼

 

全部條件轉移指令  都不影響條件碼

 

循環指令

不影響條件碼

 

調用指令

CALL調用

RET返回

 

不影響條件碼

 

 

第五週

程序員可見狀態

(1)8個程序寄存器,%eax,%ecx,%edx,%ebx,%esi,%edi,%esp,%ebp

(2)處理器的每一個程序寄存器存儲一個

(3)寄存器%esp被入棧、出棧、調用和返回指令做爲棧指針。在其餘狀況下,寄存器沒有固定的含義或固定值。

(4)有三個一位條件碼:ZF,SF,OF,它們保存最近的算術或洛基指令所形成英雄的有關信息。

(5)程序計數器PC存放當前正在執行指令的地址。

(6)存儲器:Y86程序用虛擬地址來引用存儲器位置,硬件和操做系統軟件聯合起來將虛擬地址翻譯成實際或物理地址

(7)狀態碼stat代表程序執行的整體狀態,會指示是正常運行仍是出現了某種異常。

 

  1. 指令
  2. 編碼
  3. 異常
  4. HCL
  5. 順序實現

六個基本階段:取指;譯碼;執行;訪存;寫回;更新PC

 

 

第六週

  1. RAM
  2. ROM
  3. 主存到CPU:movl A,%eax;CPU到主存:movl %eax,A
  4. 磁盤容量=字節數/扇區*平均盤區數/磁道*磁道數/表面*表面數/盤片*盤片數/磁盤
  5. 訪問時間 =尋道時間+旋轉時間+傳送時間
  6. 總線:數據總線、控制總線、地址總線
  7. 利用局部性

局部性:空間局部性、時間局部性

步長增長,空間局部性降低;

循環有好的時間和空間局部性。循環體越小,循環迭代次數越多,局部性越好。

 

緩存不命中(替換策略):冷不命中、衝突不命中、容量不命中

高速緩存存儲器結構(S,E,B,m)

 

重點&補充

1.搜索能力:

man: man -k  (等價於apropos)  

cheat

find  locate

which whereis

apt-cache search

 

2.GCC編譯的四個步驟:預處理(gcc -E)、編譯(gcc -S)、彙編(gcc -c)、連接,  gcc 選項能夠簡記爲「ESc」,相應的產出文件的後綴能夠簡記爲「iso」

3.靜態連接庫的生成:ar rcsv libxxx.a xxx.o

  靜態庫的使用: gcc -o main main.c -L. -lxxx   注意-L   -l 的含義

4.共享庫的生成 gcc -fPIC -c xxx.c

                    gcc -shared -o libxxx.so xxx.o

  共享庫的使用:gcc -o main main.c -L. -lxxx

  1. 注意註冊共享庫的方法
  2. gdb:  gcc –g

    四種斷點(函數、行、條件、臨時)

    p68 例子走一遍就行

    p75 修改變量的值:set var n=4   資料上有誤

  1. makefile:

會畫依賴圖

   會根據依賴圖寫顯示規則:

     目標:依賴文件

  1. makefile中的變量  p78的自動變量要理解
  2. 理解信息就是位+上下文
  3. p2 查看源文件能夠用od 命令 : od -tc -tx1 hello.c
  4. p5 馮式結構,理解p6 CPU執行指令的操做(加載、存儲、操做、跳轉)
  5. p9 存儲系統的核心思想:緩存
  6. p10 操做系統核心抽象(文件、虛存、進程、虛擬機):能夠指導你們學習《操做系統》
  7. 教材第七章:
  8. p450 連接器的兩個任務、目標文件的三種形式、目標文件格式(a.out COFF
  9.  PE ELF) :這四種格式,特別是PE,ELF格式是信安專業同窗要掌握的,是研究病毒等惡意代碼的基礎。
  10. p451: ELF文件格式:試試readelf命令
  11. p455: 理解全局符號的解析:學會多個模塊。
  12. p473: 處理目標文件的工具

 

20.p20: 三種數字:無符號數、有符號數(2進制補碼)、浮點數,信息安全系同窗從逆向角度考慮爲何會產生漏洞

21.p22: 進制轉換,注意拿二進制做中間結果就好轉了

22.p25: gcc -m32 能夠在64位機上(好比實驗樓的環境)生成32位的代碼

23.p26: 字節順序是網絡編程的基礎,記住小端是「高對高、低對低」,大端與之相反就能夠了。

24.p28: 代碼執行一下

25.p32: 能區分邏輯運算(結果是1或0)和位運算(結果是位向量),全部邏輯運算均可以用與、或、非表達(最大式、最小式),而與或非能夠用「與非」或「或非」表達,因此,只要一個與非門,就能夠完成全部的邏輯運算。

26.p33: 掩碼是位運算的重要應用,對特定位能夠置一,能夠清零

27.p38: 要用C99中的「long long」類型,編譯是要用 gcc -std=c99

28.p39: 補碼的利用寄存器的長度是固定的特性簡化數學運算。想一想鐘錶,29.12-1 等價於 12 + 11,利用補碼能夠把數學運算統一成加法,只要一個加法器就能夠實現全部的數學運算。

30.p44: 注意C語言中有符號數和無符號數的轉換規則,位向量不變。想一想第一章說的  信息就是「位+上下文」

31.p48: 怎麼樣讓負數等於正數? 信息安全的逆向思惟

32.p49: 0擴展和符號擴展

33.p52: 深刻思考一下代碼和結果

34.p54: 如何讓整數運算溢出?如何避免? p62例子看看

35.p67: 關於整數運算的最後思考

36.p67: 浮點數有科學計數法的基礎就不難理解,IEEE標準754

37.p68: 浮點數運算的不精確性與舍入

38.p70: IEEE浮點標準,float/double類型

39.p74: 整數與浮點數表示同一個數字的關係

40.p78: 整數與浮點數轉換規則

 

41.p104, p105: X86 尋址方式經歷三代:DOS時代的平坦模式,不區分用戶空間和內核空間,很不安全;8086的分段模式;IA32的帶保護模式的平坦模式

42.p106: ISA的定義,ISA須要你們能總結規律,觸類旁通,好比能對比學習ARM的ISA;PC寄存器要好好理解;

43.p107: gcc -S xxx.c -o xxx.s 得到彙編代碼,也能夠用objdump -d xxx 反彙編; 注意函數前兩條和後兩條彙編代碼,全部函數都有,創建函數調用棧幀,應該理解、熟記。

44.注意: 64位機器上想要獲得32代碼:gcc -m32 -S xxx.c

MAC OS中沒有objdump, 有個基本等價的命令otool

Ubuntu中 gcc -S code.c (不帶-O1) 產生的代碼更接近教材中代碼(刪除"."開頭的語句)

45.p108: 二進制文件能夠用od 命令查看,也能夠用gdb的x命令查看。

有些輸出內容過多,咱們可使用 more或less命令結合管道查看,也可使用輸出重定向來查看

od code.o | more

od code.o > code.txt

46.p109: gcc -S 產生的彙編中能夠把 以」.「開始的語句都刪除了再閱讀

47.p110: 瞭解Linux和Windows的彙編格式有點區別:ATT格式和Intel格式

48.p111: 表中不一樣數據的彙編代碼後綴

49.p112: 這幾個寄存器要深刻理解,知道它們的用處。esi edi能夠用來操縱數組,esp ebp用來操縱棧幀。對於寄存器,特別是通用寄存器中的eax,ebx,ecx,edx,你們要理解32位的eax,16位的ax,8位的ah,al都是獨立的,咱們經過下面例子說明:

假定當前是32位x86機器,eax寄存器的值爲0x8226,執行完addw $0x8266, %ax指令後eax的值是多少?

解析:0x8226+0x826=0x1044c, ax是16位寄存器,出現溢出,最高位的1會丟掉,剩下0x44c,不要覺得eax是32位的不會發生溢出.

50.p113: 結合表,深刻理解各類 尋址方式;理解操做數的三種類型:當即數、寄存器、存儲器;掌握有效地址的計算方式 Imm(Eb,Ei,s) = Imm + R[Eb] + R[Ei]*s

51.p114: MOV至關於C語言的賦值」=「,注意ATT格式中的方向, 另外注意不能從內存地址直接MOV到另外一個內存地址,要用寄存器中轉一下。能區分MOV,MOVS,MOVZ,掌握push,pop

52.p115/p116: 棧幀與push pop; 注意棧頂元素的地址是全部棧中元素地址中最低的。

53.p117: 指針就是地址;局部變量保存在寄存器中。

54.p119: 結合表理解一下算術和邏輯運算, 注意目的操做數都是什麼類型

特別注意一下減法是誰減去誰

注意移位操做移位量能夠是當即數或%cl中的數

55.p123: 結合C語言理解一下控制部分,也就是分支(if/switch),循環語句(while, for)如何實現的。考驗你們觸類旁通的學習能力。控制中最核心的是跳轉語句:有條件跳轉p128(實現if,switch,while,for),無條件跳轉jmp(實現goto)

56.p124: 有條件跳轉的條件看狀態寄存器(教材上叫條件碼寄存器)

注意leal不改變條件碼寄存器

57.思考一下:CMP和SUB用在什麼地方

58.p125: SET指令根據t=a-b的結果設置條件碼

59.p127: 跳轉與標號

60.p130/p131: if-else 的彙編結構

61.p132/p133: do-while

62.p134/p135: while

63.p137/p138: for

64.p144/p145: switch

65.p149: IA32經過棧來實現過程調用。掌握棧幀結構,注意函數參數的壓棧順序.

66.p150/p151: call/ret; 函數返回值存在%eax中

67.p174: bt/frame/up/down :關於棧幀的gdb命令

 

68.瞭解三種常見存儲技術:RAM/ROM/磁盤;

69.RAM有SRAM和DRAM,特色和應用;

ROM有PROM,EPROM,E2PROM,FLASH;

70.磁盤是重點,涉及到後面的i/o和文件系統,作好相關練習

磁盤結構:盤片、磁道、扇區、間隙、柱面;磁盤驅動器

磁盤容量

71.訪問時間:尋道、旋轉、傳送

72.邏輯磁盤塊:這個很重要,內存能夠當作字節數組、磁盤能夠當作塊數組

73.總線:數據總線、控制總線、地址總線

74.系統總線、存儲總線、I/O總線:p395圖要理解

75.讀寫事務:P389圖要能理解

 

76.局部性原理:時間局部性、空間局部性,有能力者理解一下p429最後一段「存儲器山」(山脊:時間局部性)

77.數據引用局部性

78.取指令局部性

79.存儲層次結構:系統觀(1+1>2)(觸類旁通:對稱不對稱加密造成的混合加密系統,混合動力汽車...)

80.中心思想:每層存儲設備都是下一層的「緩存」

81.對照p408的表理解

82.高速緩存結構(S,E,B,m):高速緩存組、高速緩存行、塊

83.映射

84.命中

85.緩存管理

 

 

 

我的感想

不知不覺學期已過半,對這門課的情緒一直在變化。還記得第一週,還沒從手忙腳亂的電工實習中緩過勁就連熬十幾個小時在學校的爛網下趕那十幾個實驗,就此也對這門課、還有老師特殊的教學方式產生不小的抵觸,每週作任務很煎熬然而必需要作。可是隨着一週又一週過去,我漸漸習慣了這種每週都花固定時間來學習的生活。實話說大學以來個人學習能力降低了太多太多,積極性主動性什麼的更是幾乎消磨殆盡,而這種「使自主」學習方式,讓我天天都想着還要學習還要學習,這種態度的轉變我以爲是最大的收穫。

在實際學習中,婁老師提供了不少新式的平臺方式,實驗樓自主實驗、博客借鑑、小組論壇討論、合做完成家庭做業等,除去學校網速限制之外我從中受益不少。之前學習遇到問題可能直接就放棄了,等老師課上講或者問同窗,甚至直接跳過。而如今,老是會先本身想一想如何解決,而後發到論壇中,和老師同窗分享本身的思路,不一樣的思惟碰撞以後獲得正確的解答,這樣對問題的記憶極其深入永遠不會忘。好的學習方法對學習效果有太大的提高。

 

反思本身,我以爲我最大的問題仍是自制力差,容易分心,遇到問題容易煩躁而後思惟就轉移了不專一了。如今跟着老師的新方式學習有些改觀,加上本身的剋制好比去學習不帶手機,能夠說比以前好不少。我以爲連續學習兩小時中第二個小時要比第一個小時效率高不少,在之後的學習中要繼續剋制繼續剋制,多利用第二個小時。

 

課程建議

老師這種教學改革剛開始感受很煎熬,但一旦習慣了才發現這樣纔是真正的事半功倍。若是不是這種每週任務制,大部分人到了期末都是惡補,不只熬夜耗時間耗精力重點是還學不到東西。而如今這種方式你們的學習積極性都很高,主動搶題主動查實驗,作的任務多得分就高,公平又高效。不足的地方…默默說一句老師您講課的時候語速太快有時候聽不太清……重點的地方能夠說的稍微慢一點嘛……

相關文章
相關標籤/搜索