天天看點

資訊安全系統設計基礎第三周學習總結

第三周(9.21-9.27):

學習計時:共8小時

讀書:3h

代碼:1h

作業:4h

部落格:1h

一、學習目标

1. 熟悉Linux系統下的開發環境

2. 熟悉vim的基本操作

3. 熟悉gcc編譯器的基本原理

4. 熟練使用gcc編譯器的常用選項

5 .熟練使用gdb調試技術

6. 熟悉makefile基本原理及文法規範

7. 掌握靜态庫和動态庫的生成

二、學習資源

1. 教材:第一章,第七章

2. 《嵌入式Linux應用程式開發标準教程》第三章3.1-3.5

3. 課程資料:https://www.shiyanlou.com/courses/413 實驗二,課程邀請碼:W7FQKW4Y

4. Vim編輯器:https://www.shiyanlou.com/courses/2

5. 教學視訊:http://pan.baidu.com/s/1kTHxOFl ,可以參考第十個視訊

三、學習方法

1. 進度很重要:必須跟上每周的進度,閱讀,練習,問答,項目。我會認真對待每一位同學,請你不要因為困難半途而廢。

2. 問答很重要:遇到知識難點請多多提問,這是你的權利更是您對自己負責的義務。問答到部落格園讨論小組:http://group.cnblogs.com/103791/

3. 實踐很重要:解決書中習題,實踐書中執行個體,完成每周項目,才算真的消化了這本好書。通過實驗樓環境或自己安裝的虛拟機在實踐中進行學習

4. 實驗報告很重要:詳細記錄你完成項目任務的思路,獲得老師點評和幫助自己複習。學習完成後在部落格園中(http://www.cnblogs.com/)把學習過程通過部落格發表,部落格标題“資訊安全系統設計基礎第二周學習總結”

四、學習任務

(提示:請将要求學生完成的任務、測驗或思考題列在此處)

1.教材第一章,第七章學習:閱讀并消化教材内容(有部分考試内容)

2.《嵌入式Linux應用程式開發标準教程》第三章3.1-3.5的學習(本周大部分考試内容都從這出,特别是與教材重複内容)

3.完成實驗并發Blog

練習vimtutuor 三遍

使用vim 輸入以下代碼,聯系使用“K”查找幫助文檔:

練習gcc編譯運作代碼。

練習gdb調試代碼 。

把上述代碼中除了main函數外的代碼制作成一個靜态庫math.a和一個共享庫math.so。

編寫makefile,讓代碼編譯,上述靜态庫和共享庫的使用自動化。

五、後續學習預告(可選):

教材第二章《資訊的表示和處理》

六、學習過程

1. 重要知識點總結梳理:

實驗樓之深入了解計算機系統

實驗一 Linux基礎

(一)

1. Linux指令

(1)Linux中指令格式為:

command [options] [arguments] //中括号代表是可選的,即有些指令不需要選項也不需要參數。

例如:ls指令,ls或ls .顯示是目前目錄的内容,這裡“.”就是參數,表示目前目錄,是預設的可以省略。我們可以用ls -a .顯示目前目錄中的所有内容,包括隐藏檔案和目錄。其中“-a” 就是選項,改變了顯示的内容。

2. man指令

(1)幫助文檔包含:

1 Executable programs or shell commands(使用者指令幫助)

2 System calls (系統調用幫助)

3 Library calls (庫函數調用幫助)

4 Special files (usually found in /dev)

5 File formats and conventions eg /etc/passwd(配置檔案幫助)

6 Games

7 Miscellaneous (including macro packages and conventions), e.g. man(7), groff(7)

8 System administration commands (usually only for root)

9 Kernel routines [Non standard]

解釋一下:

1是普通的Linux指令

2是系統調用,作業系統的提供的服務接口

3是庫函數, C語言中的函數

5是指檔案的格式,比如passwd, 就會說明這個檔案中各個字段的含義

6是給遊戲留的,由各個遊戲自己定義

7是附件還有一些變量,比如向environ這種全局變量在這裡就有說明

8是系統管理用的指令,這些指令隻能由root使用,如ifconfig

(2)man printf,man 1 printf,man 3 printf差別

要檢視相應區段的内容,就在 man 後面加上相應區段的數字即可,如:

$ man 3 printf

3. cheat指令

4.其他核心指令

和查找相關的核心指令還有find,locate,grep,whereis,which,其中:

find查找一個檔案在系統中的什麼位置,locate是神速版本的find(Windows下有個Everything工具和locate類似).

grep 可以對檔案全文檢索,支援正規表達式,正規表達式也是一個重要的元知識。

whereis,which告訴你使用的指令工具裝在什麼地方。

實驗二 Linux下C語言開發基礎

(一)快捷鍵

(二)vim

(1.1)光标移動

資訊安全系統設計基礎第三周學習總結

程式員有幾個鍵提示一下:

大寫“K”可以用來查找函數的幫助資訊:檢視 man page,指令模式下,将光标放在函數名上,按"K"可以直接察看 man page。

幾個設定

:set nu 顯示行号

:set ai 自動縮行

:set ts=4 設定一個 TAB 鍵等于幾個空格

移動光标

[[ 轉到上一個位于第一列的"{"

]] 轉到下一個位于第一列的"{"

{ 轉到上一個空行

} 轉到下一個空行

gd 轉到目前光标所指的局部變量的定義

(1.2)vim的進入和退出

(1.3)文本編輯之删除

(1.4)文本編輯之插入

(1.5)文本編輯之添加“a”

資訊安全系統設計基礎第三周學習總結

(2.1)删除類指令

(2.2)更多删除類指令

(2.3)關于指令和對象

(2.4)使用計數指定動作

(2.5)使用記數以删除更多

(2.6)操作整行

(2.7)撤銷類指令

資訊安全系統設計基礎第三周學習總結
資訊安全系統設計基礎第三周學習總結

(3.1)置入類指令

(3.2)替換類指令

(3.3)更改類指令

(3.4)使用c更改更多

資訊安全系統設計基礎第三周學習總結

(4.1)定位及檔案狀态

(4.2)搜尋類指令

(4.3)配對括号的查找

(4.4)替換指令

資訊安全系統設計基礎第三周學習總結

(5.1)在vim内執行外部指令的方法

(5.2)關于儲存檔案的更多資訊

(5.3)一個具有選擇性的儲存指令

(5.4)提取和合并檔案

資訊安全系統設計基礎第三周學習總結

(6.1)打開類指令

(6.2)附加類指令

資訊安全系統設計基礎第三周學習總結

(7.1)擷取幫助資訊

(7.2)建立啟動腳本

(7.3)補全功能

資訊安全系統設計基礎第三周學習總結

(三)gcc

GNU CC(簡稱為gcc)是GNU項目中符合ANSI C标準的編譯系統,能夠編譯用C、C++和Object C等語言編寫的程式。gcc又是一個交叉平台編譯器,它能夠在目前CPU平台上為多種不同體系結構的硬體平台開發軟體,是以尤其适合在嵌入式領域的開發編譯。

(四)gdb

預處理: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

建議使用CGDB,比GDB好用,熟悉VC的調試方式,可以使用DDD。 注意使用GCC編譯時要加“-g”參數。 參考gdb參考卡GDB最基本的指令有:

gdb programm(啟動GDB)

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

run 開始運作程式

bt 列印函數調用堆棧

p 檢視變量值

c 從目前斷點繼續運作到下一個斷點

n 單步運作

s 單步運作

quit 退出GDB

(五)make與makefile

實驗樓之vim編輯器

vim快速入門

vim文檔編輯

查找替換

進階功能入門

教材第一章

計算機系統漫遊

教材第七章

連結

PDF教材3.1~3.5

第3章  Linux下C程式設計基礎    57

3.1  Linux下C語言程式設計概述    57

3.1.1  C語言簡單回顧    57

3.1.2  Linux下C語言程式設計環境概述    58

3.2  常用編輯器    59

3.2.1  進入vi    59

3.2.2  初探emacs    62

3.3  gcc編譯器    67

3.3.1  gcc編譯流程解析    67

3.3.2  gcc編譯選項分析    70

3.4  gdb調試器    75

3.4.1  gdb使用流程    75

3.4.2  gdb基本指令    79

3.5  make工程管理器    83

3.5.1  makefile基本結構    84

3.5.2  makefile變量    84

3.5.3  makefile規則    87

3.5.4  make管理器的使用    88

http://blog.csdn.net/ruglcc/article/details/7814546/

2. 教材代碼編譯運作

3. 課後作業

(1)在vim中輸入代碼 

資訊安全系統設計基礎第三周學習總結
資訊安全系統設計基礎第三周學習總結
資訊安全系統設計基礎第三周學習總結
資訊安全系統設計基礎第三周學習總結

(2)gcc

資訊安全系統設計基礎第三周學習總結

(3)靜态庫 

資訊安全系統設計基礎第三周學習總結

(4)動态庫 

資訊安全系統設計基礎第三周學習總結

七、遇到的問題及解決

1.作業

資訊安全系統設計基礎第三周學習總結

 嘗試了分開編譯的方式無法成功,一起編譯就成功了。

 2.如何運作程式

./檔案名

3.gdb 

資訊安全系統設計基礎第三周學習總結
資訊安全系統設計基礎第三周學習總結

 以上是第一天遇到的狀況,當天并未解決。第二天按書上步驟編譯時gcc -g add.c sub.c mul.c div.c main.c -o main ,結果gdb正常如下圖

資訊安全系統設計基礎第三周學習總結

不知道是否是因為加上了選項-g。

八、其他

這周在編譯上花費了很多時間,其中做了很多種錯誤的編譯方式。我們現在的學習模式是先自學,然後考試,最後老師總結。我想建議老師可不可以老師先對我們即将要學的東西做一些提示(一點點就好)、在過程中可能遇到的問題,然後我們自學,最後考試。這樣我們在遇到困難的時候就會想起老師課上曾提過就不會花費大量時間四處尋找解決辦法。僅是一點建議,望老師考慮。