20145201 《信息安全系統設計基礎》期中總結

20145201 《信息安全系統設計基礎》期中總結

教材學習內容總結

  • Linux命令 特別是man -k, cheat, grep -nr xxx /usr/include

1.man:
查看幫助文檔:man+關鍵詞
man -k:
用來搜索,結合管道使用。html

man -k k1 | grep k2 | grep 2
搜索同時含有k1和k2,且屬於系統調用。linux

最後的數字表明幫助手冊中的區段,經常使用的123,分別以下:編程

1.Linux
2.系統調用
3.c語言

2.cheat
提供顯示Linux命令使用案例,包括該命令全部的選項和簡短但尚可理解的功能。
cheat是很是好用的「打小抄」搜索工具
eg:
cheat lsvim

3.grep 用來查找關鍵字,全文搜索,且能夠直接查找文件內的內容緩存

greep -n 顯示匹配的行號
greep -r 遞歸查找安全

eg:若是想查找某個宏,咱們已知宏保存在include文件夾中:
grep -nr XXX /usr/include(XXX注意要替換爲所要找的宏)函數

  • vi使用

三種經常使用模式及其轉換:
普通→插入: i/a
普通→命令行: 「:」
插入/命令行→普通: Esc 或 Ctrl + [工具

經常使用操做:
vim 文件名:進入vim,還可新建文件
命令行模式下 :wq 表示保存並退出學習

  • gcc, gdb使用

一、GCC
gcc流程:測試

一、預處理:gcc會調用預處理程序cpp,由它負責展開在源程序中定義的宏
gcc -E hello.c -o hello.i

二、編譯:翻譯成彙編文件
gcc –S hello.i –o hello.s 

三、彙編:將hello.i編譯爲目標代碼(二進制代碼)
gcc -c hello.s -o hello.o

四、連接:gcc鏈接器將目標文件連接爲一個可執行文件
gcc hello.o -o hello

二、GDB

在編譯時,必需要把調試信息加到可執行文件中。

gcc -g hello.c -o hello

基本命令:

gdb programm    啓動GDB
l               查看所載入的文件
b               設斷點
info b          查看斷點狀況
run             開始運行程序
bt              打印函數調用堆棧
p               查看變量值
c               從當前斷點繼續運行到下一個斷點
n               單步運行(不進入)
s               單步運行(進入)
quit            退出GDB

gdb四種斷點:

①行斷點   b [行數或函數名] <條件表達式>
②函數斷點  b [函數名] <條件表達式>
③條件斷點  b [行數或函數名] <if表達式>
④臨時斷點  tbreak [行數或函數名] <條件表達式>


gcc hello_print.c hello_main.c –o hello的解釋中,最後一個命令的是將這兩個.o文件轉換爲一個可執行的hello的文件

靜態庫和動態共享庫的代碼區別
建立:
靜態庫的建立須要調用歸檔工具ar:

gcc -c addvec.c multvec.c
ar rcs libvector.a addvec.o multvec.o

而動態庫只須要gcc便可:

gcc -shared -fPIC -o libvector.so addvec.c multvec.c

連接:
靜態庫的連接須要先編譯生成.o文件,而後再和庫連接,而且須要staric命令構建一個徹底連接的可執行文件:

gcc -02 -c main2.c
gcc -static -o p2 main2.o ./libvector.a

動態庫能夠直接把.c文件和庫文件連接

gcc -o p2 main2.c ./libvector.so
  • makefile
    make工具根據makefile文件中描述的源程序至今的相互關係來完成自動編譯、維護多個源文件工程。

makefile須要說明如何編譯各個源文件並連接生成可執行文件,要求定義源文件之間的依賴關係。

Makefile的通常寫法:

test(目標文件): prog.o code.o(依賴文件列表)
tab(至少一個tab的位置) gcc prog.o code.o -o test(命令)
.......

eg.
例:

test: prog.o code.o
      gcc prog.o code.o -o test

prog.o: prog.c code.h
        gcc -c prog.c -o prog.o

code.o: code.c code.h
        gcc -c code.c -o code.o

clean:
     rm -f *.o test

其餘:
存儲系統的核心思想:緩存

Linux Bash中,cd ~ 命令能夠切換到'home'目錄。 (Ok)
Linux Bash中,cd - 命令能夠切換到上一個目錄
cd ~ 命令切換到'home'目錄

一些題目總結:
Linux中沒有C盤,D盤,其文件系統的目錄是由(FHS)標準規定好的。
Linux Bash中,使用tar命令把home目錄打包成home.tar的命令是( tar -cf home.tar ~)
Linux Bash中,ls . | sort 命令的功能是( 顯示當前目錄內容並排序 )

Linux系統中,連接器程序是(ld)

(Shannon 或香農)創建了布爾代數和數字邏輯之間的聯繫。
IEEE浮點數標準包含符號、尾數、(階碼)三部分。

Linux彙編中,銷燬棧幀的語句是(movl %ebp,%esp popl %ebp 或leave)
Linux彙編中,須要調用者保存的寄存器有(%eax,%edx,%ecx )
GDB中以16進制形式打印%eax中內容的命令是(print /x $eax)

解開sim.tar的Linux命令是(tar -xvf sim.tar)

SRAM和DRAM掉電後均沒法保存裏面的內容。( ok )
存儲器給出的讀訪問時間是(局部性)的一個函數。

本身的收穫

在本學期的八週的學習中,我最大的收穫對自主學習這種方式有了更深刻的體會,也更加適應了每週對這門課的學習狀態。
在剛拿到這本書的時候,內心仍是有一慌亂的。被本書比上學期更厚了,感受無從着手學習。知識量很大,經常是學習下一部份內容,就忘了上一部份內容。經過在實驗樓上的實踐練習還有老師畫出課後的一些重點習題對知識進行鞏固。
在後面逐漸深刻的學習中,發現有的內容以前的其餘課程或多或少都有接觸過,好比彙編的知識,還有HCL知識。經過對比學習,可讓我把知識理解的更透徹、更深刻。還有實驗部分,最開始第一邊作時沒有成功,在後來本身一步步檢查時查出問題所在,然後修改爲功時,感受仍是頗有成就感的。
學期過半,我在收穫知識的同時,也學到了自學的方法,以後只有更加努力才行。

本身的不足

部分知識學習仍是有些流於表面,沒有深刻理解到精髓。同時課後的習題也要多作,根據每週劃的重點習題,更加細緻去理解知識點。考試的錯題要及時查看老師每週更新的答案,本身多上心一些。操做的部分也須要多多動手,不能死板的跟着步驟一步步作,無目的的敲代碼,要理解每一步這樣作是爲了,本身爲什麼打這些代碼。

課程建議和意見

課上最好還能夠講一下書本的重點習題和錯的比較多的課前測試的內容,這學期的課程仍是圍繞課本展開的。但這僅是個人我的的想法,老師能夠酌情采納。

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第一週 100/100 2/2 25/25 安裝了虛擬機並學習掌握核心的linux命令
第二週 100/200 1/3 30/55 虛擬機上的C語言編程
第三週 150/350 1/4 10/65 計算機中信息的表示和運算
第四周 0/350 0/4 3/68 複習前幾周內容
第五週 75/420 1/5 20/88 程序的機器級表示
第六週 125/545 1/6 20/108 Y86指令 硬件語言控制HCL
第七週 72/617 1/7 20/128 磁盤 存儲器相關結構
第八週 0/617 2/9 20/148 期中總結

參考資料

相關文章
相關標籤/搜索