20145326蔡馨熠《信息安全系统设计》第2周学习总结
20145326蔡馨熠《信息安全系統設計》第2周學習總結
教材學習內容總結
一、計算機系統與鏈接
- 信息就是位+上下文,都是由一串位表示的,區分不同數據對象的唯一方法是我們讀到這些數據對象時的上下文。ASCII字符構成的文件是文本文件,所有其他文件都是二進制文件。
- 文件是字節序列
- Hello程序的生命周期從高級C語言程序開始,每條C語句被轉化為一系列“低級機器語言”指令,然后這些指令按照“可執行目標程序”的格式打包,并以二進制磁盤文件的形式存放起來,目標程序也稱為“可執行目標文件”。
- 源文件到目標文件的轉化由編譯器驅動程序完成:gcc -o hello hello.cGCC編譯器驅動程序讀取源文件并把它翻譯成一個可執行目標文件。翻譯過程分為四個階段:預處理、編譯、匯編、鏈接,預處理器、編譯器、匯編器、鏈接器一起構成編譯系統。
- 計算機系統是由硬件和系統軟件組成的,程序被其他程序翻譯成不同的形式,開始時是ASCII文本,然后被編譯器和鏈接器翻譯成二進制可執行文件
- 系統的硬件組成:總線、I/O設備、內存、處理器
- 并發:一個同時具有多個活動的系統。
- 并行:用并發使一個系統運行地更快,并行可以在計算機系統多個抽象層次上運用。按照系統層次結構由高到低的順序強調三個層次:線程級并發、指令級并行、單指令多數據并行
- 處理器讀取并解釋存放在主存里的二進制指令
- 操作系統內核是應用程序和硬件之間的媒介,提供三個基本的抽象:
a.文件是對I/O設備的抽象;
b.虛擬存儲器是對主存和磁盤的抽象;
c.進程是對處理器、主存和I/O設備的抽象。
-
網絡提供了計算機系統之間通信的手段
-
靜態鏈接器主要任務:符號解析、重定位
- 目標文件形式:可重定位目標文件、可執行目標文件、共享目標文件
- 每個可重定位目標模塊m都有一個符號表,它包含m所定義和引用的符號的信息。有三種不同的符號:
a.由m定義并能被其他模塊引用的全局符號
b.由其他模塊定義并被模塊m引用的全局符號
c.只被模塊m定義和引用的本地符號
二、Vim編輯器
VIMTUTOR是個實踐教程,通過實踐30分鐘讓你對VIM編輯器入門,只要在命令行中輸入vimtutor,然后跟著教程練習就可以了~
1.一般操作
Vim可以僅僅通過鍵盤在任意模式之中進行切換,這就使得Vim可以不用進行菜單或者鼠標操作,使文字錄入員或者程序員可以大大增強速度和效率。vim有6種基本模式(常用的是普通模式、插入模式和命令行模式):
- 普通模式(Normal mode):在普通模式中,用的編輯器命令,比如移動光標,刪除文本等等。這也是Vim啟動后的默認模式。在普通模式中,進入插入模式比較普通的方式是按a(append/追加)鍵或者i(insert/插入)鍵。
- 插入模式(Insert mode):在插入模式中,可以按ESC鍵回到普通模式。
- 可視模式(Visual mode):命令多與字母v有關,移動命令會擴大高亮的文本區域。高亮區域可以是字符、行或者是一塊文本。
- 選擇模式(Select mode):這個模式中,可以用鼠標或者光標鍵高亮選擇文本,不過輸入任何字符的話,Vim會用這個字符替換選擇的高亮文本塊,并且自動進入插入模式。
- 命令行模式(Command line mode):在命令行模式中,執行命令(:鍵),搜索(/和?鍵)或者過濾命令(!鍵)。在命令執行之后,Vim返回到命令行模式之前的模式,通常是普通模式。
- Ex模式(Ex mode):這和命令行模式比較相似,在使用:visual命令離開Ex模式前,可以一次執行多條命令。
2.三種常用模式的切換:
- vim啟動進入普通模式;
- 處于插入模式或命令行模式時只需要按Esc即可進入普通模式;
- 普通模式中按i(插入)進入插入模式;
- 普通模式中按:進入命令行模式;
- 命令行模式中輸入wq回車后保存并退出vim。
3.進入vim:
- 在終端中輸入 vim 文件名;
- 在終端中輸入vim,進入vim界面中,進入命令行模式輸入:e 文件路徑(文件名)
4.游標移動(在普通模式下,按Esc進入普通模式):
| 按鍵 | 說明 |
| h | 左 |
| i | 右 |
| j | 下 |
| k | 上 |
| w | 移動到下一個單詞 |
| b | 移動到上一個單詞 |
?
?
-
命令行模式下保存文檔:從普通模式輸入:進入命令行模式,輸入w回車,保存文檔。輸入:w?文件名可以將文檔另存為其他文件名或存到其它路徑下。
-
退出vim(常用):
a.命令行模式下退出vim:從普通模式輸入:進入命令行模式,輸入wq回車,保存并退出編輯。?
b.普通模式下退出vim:普通模式下輸入Shift+zz即可保存退出vim。
?
?
?
- 快速縮進(縮進操作均在普通模式下有效):
a.使用命令進行快速調整縮進操作:通模式下輸入15G,跳轉到15行;普通模式下輸入>>整行將向右縮進(使用,用于格式化代碼超爽);普通模式下輸入<<整行向左回退;普通模式下輸入:進入命令行模式下對shiftwidth值進行設置可以控制縮進和回退的字符數。
b.shiftwidth命令:shiftwidth命令是指>>命令產生的縮進(可以簡寫成sw) 普通模式下輸入:進入命令行模式;對shiftwidth值進行設置可以控制縮進和回退的字符數。 獲取目前的設定值:set shiftwidth?;設置縮進為10個字符:set shiftwidth=10。
- 調整文本位置:
a.命令行模式下輸入:ce(center)命令使本行內容居中
b.命令行模式下輸入:ri(right)命令使本行文本靠右
c.命令行模式下輸入:le(left)命令使本行內容靠左
- 查找:
a.普通模式下輸入/向下查找,輸入?向上查找,n表示繼續查找,N反向查找。
b.普通模式下輸入\*尋找游標所在處的單詞
c.普通模式下輸入\#同上,但\*是向前(上)找,#則是向后(下)找
d.普通模式下輸入g\*同\*,但部分符合該單詞即可
e.普通模式下輸入g\#同\#,但部分符合該單詞即可
- 使用vim編輯多個文件:
a.編輯多個文件有兩種形式:一種是在進入vim前使用的參數就是多個文件;另一種就是進入vim后再編輯其他的文件。同時創建兩個新文件并編輯$?vim 1.txt 2.txt?
b.默認進入1.txt文件的編輯界面:命令行模式下輸入:n編輯2.txt文件,可以加!即:n!強制切換,之前一個文件的輸入沒有保存,僅僅切換到另一個文件;命令行模式下輸入:N編輯1.txt文件,可以加!即:N!強制切換,之前文件內的輸入沒有保存,僅僅是切換到另一個文件。
- 進入vim后打開新文件:
a.命令行模式下輸入:e 3.txt打開新文件3.txt
b.命令行模式下輸入:e#回到前一個文件
c.命令行模式下輸入:ls可以列出以前編輯過的文檔
d.命令行模式下輸入:b 2.txt(或者編號)可以直接進入文件2.txt編輯?
e.命令行模式下輸入:bd 2.txt(或者編號)可以刪除以前編輯過的列表中的文件項目
f.命令行模式下輸入:e! 4.txt,新打開文件4.txt,放棄正在編輯的文件
g.命令行模式下輸入:f顯示正在編輯的文件名
h.命令行模式下輸入:f new.txt,改變正在編輯的文件名字為new.txt
-
恢復文件:vim -r進入文檔后,輸入:ewcover 1.txt來恢復。
-
創建加密文檔:$ vim -x file1
三、GCC的使用
1.gcc 編譯程序的流程:
- 預處理:gcc –E cxy.c –o cxy.i;gcc –E調用cpp,產生預處理過的C原始程序
- 編譯:gcc –S cxy.i –o cxy.s;gcc –S調用ccl,產生匯編語言原始程序
- 匯編:gcc –c cxy.s –o cxy.o;gcc -c調用as,產生目標文件
- 鏈接:gcc cxy.o –o cxy;gcc -o調用ld,產生可執行文件
- 運行:./cxy
2.庫選項:-static(進行靜態編譯,即鏈接靜態庫、禁止使用動態庫)、-shared(生成動態庫文件、進行動態編譯,在沒有動態庫時才會鏈接同名靜態庫)、-L dir(在庫文件的搜索路徑列表中添加dir目錄)、-lname、-fPIC(生成使用相對地址的位置無關的目標代碼,然后使用gcc的-static選項從該PIC目標文件生成動態庫文件)
3.靜態庫是一系列的目標文件(.o文件)的歸檔文件((lib+name).a文件);鏈接階段,選擇靜態庫,后綴名為“.a”,選擇動態庫,后綴名為“.so”。
- 靜態鏈接庫的生成:gcc -c 文件名.c?ar rcsv libxxx.a xxx.o;
- 靜態庫的使用:gcc -o 文件名?文件名.c -L. -lxxx?//鏈接到靜態庫;
?
4.共享庫的生成:gcc -fPIC -c xxx.cgcc -shared -olibxxx.so xxx.o;共享庫的使用:gcc -o main main.c -L. -lxxx
5.注冊共享庫的方法:
- 修改/etc/ld.so.conf文件
- 修改LDLIBRARYPATH環境變量
- 將庫文件直接復制到/lib或者/usr/lib目錄下:cp (lib+name).so /lib
?
四、GDB的使用
-
程序的運行狀態有“運行”、“暫停”、“停止“三種。
-
主要操作:
-
查看文件:l
- 設置斷點:在b后加入相對應的行號。例b 6
- 查看斷點情況:設置完斷點后鍵入info b,在gdb中可以設置多個斷點。bt查詢調用函數的情況
- 運行代碼:默認從首行開始運行代碼,鍵入r;r+行號:從該行號開始運行
- 查看變量值:p變量。例:p n
- 單步運行:n或s,s會進入函數,n不會進入函數
- 恢復程序運行:c
- 幫助信息:h
- 斷點的設置:
- 函數:b 文件名.c:函數名
- 行:b 行數
- 條件:b 行數 if 表達式(例如:b 9 if == 12)
- 臨時:tb [文件名:]行號或函數名 <條件表達式>
五、MakeFile的使用
- 一個工程中的源文件不計其數,按其類型、功能、模塊分別放在若干個目錄中。makefile定義了一系列的規則來指定,哪些文件需要先編譯,哪些文件需要后編譯,哪些文件需要重新編譯,甚至進行更復雜的功能操作。其帶來的好處就是——“自動化編譯”,一但寫好,只需要一個make命令,整個工程完全編譯,極大的提高了軟件的開發效率。
- makefile文件編寫規則:
a.目標文件:由make創建,通常是目標文件或可執行文件
b.依賴文件:創建目標體所依賴的文件
c.運行命令:創建每個目標體時需要的運行命令,必須以tab鍵開頭
d.格式為:目標文件:依賴文件列表[tab鍵]各目標體運行命令(注意不是空格)
e.使用make的格式:make 目標文件
- makefile變量的定義:
a.遞歸展開方式:在引用該變量時進行替換(不能用于引用自己的情況),缺點:不能在變量后追加內容
b.格式定義:VAR = var
c.展開方式:在定義處展開,并只展開一次。優點:消除變量的嵌套引用
d.格式定義:VAR := var
e.make中變量的使用格式: $(變量名)
f.變量名的命名:不包括“:”、“#”、“=”以及結尾空格的任何字符串;變量名大小寫不敏感
學習過程中的問題
1.進行GDB調試時,出現錯誤!
?
原因及解決:原因是生成的二進制可執行文件沒有使用-g選項。
gcc中-g選項是為了獲得有關調試信息,要用gdb進行調試,必須使用-g生成二進制可執行文件!
2.裝git的過程中(生成公鑰時),當使用命令cd ~/.ssh進入~/.ssh文件夾,輸入gedit id_rsa.pub打開id_rsa.pub文件,發現里面是空白的,沒有內容。
后來發現是輸入 cd ~/.ssh 時出現了錯誤,“/”符號與“.”符號之間我多輸入了一個空格字符。解決問題后,效果如下:
3.最后git push -u origin master的時候,命令行要求輸入username,我混淆了概念,我一直輸入的是“20145326蔡馨熠”,所以出不來結果,應該是登錄時用的賬號!
4.在自己的虛擬機上用makefile的時候,會出現“XXX is up to date”的問題。網上說好像用.PHONY來解決,我沒搞懂。
?
?
代碼托管情況及git安裝
先要在Ubantu中安裝git,使用命令: sudo apt-get install git
其次是設置用戶名和用戶郵箱,也就是自己在Git@OSC上注冊的賬號。
用git config --global user.name "xxx" ??git config --global user.email "xxx" ?
然后在ubuntu下生成公鑰(id_rsa是私有秘鑰,is_rsa.pub是公鑰)
ssh-keygen -t rsa -C "413741392@qq.com"
創建完公鑰后,需要上傳。使用命令 ?cd ~/.ssh?進入~/.ssh文件夾,輸入gedit id_rsa.pub打開id_rsa.pub文件,復制其中所有內容。接著訪問http://git.oschina.net/key網頁,標題欄可以隨意輸入,公鑰欄把你剛才復制的內容粘貼進去就OK了。
可以測試是否連通:
ssh -T git@git.oschina.net
按照提示操作,如果聯通,則出現如下信息:
Welcome to Git@OSC, 20145326蔡馨熠!
在ubuntu下新建一個文件夾 gitcode,然后cd到該文件夾下,把一些文件拷貝到該目錄下。
mkdir gitcode
cd gitcode
接下來執行如下命令:
git init(初始化倉庫)
git add .(這個點代表該目錄下的所有文件)
git commit -m “20145326cxy”
此時工程中的所有文件都以提交到HEAD,但是還沒有提交到服務器。
現在可以將代碼提交到Git@OSC倉庫了
先在Git@OSC項目中添加一個遠程倉庫origin
git remote add origin https://git.oschina.net/cxy368/caixinyi20145326.git
現在把本地項目master 分支推送到origin倉庫
git push -u origin master
?
統計代碼行數
心得體會
本周主要的學習內容就是vim,gcc,gdb以及makefile還有git的安裝。其中,vim的使用方法重點在于練習,只有經過不斷地練習才能熟練掌握并使用。gcc、gdb和makefile的使用方法有一定的命令格式和規則,只要遵循其規則格式就能夠簡單編譯、運行、調試程序。計算機系統的相關知識重點在于記憶和理解,鏈接里面的用語有些生疏,一下子并不能完全理解,還需要再仔細看看并理解。因為自己電腦上的虛擬機特別卡,所以有時候會用實驗樓環境,不過實驗樓環境有時候沒有注意操作的時間,會被強退掉,之前數據也會全部丟失,我就是因為這個原因,有一部分的代碼敲在實驗樓里,沒有及時托管,被“吃掉”了,這很尷尬。這周沒有安排好時間,把知識都堆在了周末來學,所以感覺任務很多,壓力很大,git的知識也忘了很多,所以一開始整個人很壓抑,效率也不高,但是又不想敷衍自己,于是在調整了自己的狀態后,一步一步,按部就班的開始了我的學習任務,只求質量,不求數量。我仔細看了實驗樓里的資料和書上的知識點后,開始動手操作,熟悉vim,gcc,gdb,makefile的相關用法,其實還算簡單,因為給的例子特別生動形象,只需要熟記指令及用法,就沒什么大問題。安裝git的時候雖然中途也有很多問題,但都還是一一克服了,挺有成就感的,因為從頭到尾都是靠的自己,這也算是學習的一種樂趣吧~我覺得,首先心一定要靜下來,這將決定學習的質量,然后時間上要安排好,不要趕進度,要追求質量!提高自己的學習效率,千萬不要敷衍!不然最終害的是自己,后面想補都補不回來。一開始就要贏在起跑線。這學期的課程還是婁老師給我們上,雖然平時要求嚴,不過相比上學期我覺得輕松多了,因為婁老師在課上講的東西更多了,只要認真聽,仔細做筆記,就會學得很輕松~ 我會再接再厲,盡最大努力將這門課學好~
學習進度條
| ? | 代碼行數(新增/累積) | 博客量(新增/累積) | 學習時間(新增/累積) | 重要成長 |
| 目標 | 5000行 | 30篇 | 400小時 | ? |
| 第一周 | 0/0 | 1/2 | 20/20 | ? |
| 第二周 | 58/58 | 1/3 | 20/40 | ? |
轉載于:https://www.cnblogs.com/cxy1616/p/5907614.html
總結
以上是生活随笔為你收集整理的20145326蔡馨熠《信息安全系统设计》第2周学习总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 08、单链表编程考点
- 下一篇: 在windows下codeblocks中