信息安全系統設計基礎第三週學習總結

第三週(9.21-9.27):

學習計時:共xxx小時html

讀書:linux

代碼:shell

做業:編程

博客:vim

1、學習目標安全

1. 熟悉Linux系統下的開發環境   
2. 熟悉vi的基本操做   
3. 熟悉gcc編譯器的基本原理   
4. 熟練使用gcc編譯器的經常使用選項   
5 .熟練使用gdb調試技術   
6. 熟悉makefile基本原理及語法規範   
7. 掌握靜態庫和動態庫的生成

2、學習資源併發

 

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

2. 《嵌入式Linux應用程序開發標準教程》第三章3.1-3.5編輯器

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

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

5. Linxu系統編程:https://www.shiyanlou.com/courses/24,實驗二、三、4

6. 教學視頻:http://pan.baidu.com/s/1kTHxOFl ,能夠參考第十個視頻

3、學習方法

 

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

2. 問答很重要:遇到知識難點請多多提問,這是你的權利更是您對本身負責的義務。問答到博客園討論小組:http://group.cnblogs.com/103791/
3. 實踐很重要:解決書中習題,實踐書中實例,完成每週項目,纔算真的消化了這本好書。經過實驗樓環境或本身安裝的虛擬機在實踐中進行學習
4. 實驗報告很重要:詳細記錄你完成項目任務的思路,得到老師點評和幫助本身複習。學習完成後在博客園中(http://www.cnblogs.com/)把學習過程經過博客發表,博客標題「信息安全系統設計基礎第二週學習總結」

 

4、學習任務

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

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

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

3.完成實驗併發Blog

 

  • 練習vimtutuor 至少一遍 
  • 使用vim 輸入如下代碼,聯繫使用「K」查找幫助文檔:

 

 

  • 練習gcc編譯運行代碼。 
  • 練習gdb調試代碼 。
  • 把上述代碼中除了main函數外的代碼製做成一個靜態庫math.a和一個共享庫math.so。 
  • 編寫makefile,讓代碼編譯,上述靜態庫和共享庫的使用自動化。

 

 

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

教材第二章《信息的表示和處理》

6、學習過程

(提示:此處由學生填寫,學習過程,學習筆記,代碼編譯,運行結果,思考等)

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

vim部分

一、Vim的6種基本模式:

  • 普通模式(Normal mode):在普通模式中,進入插入模式比較普通的方式是按a(append/追加)鍵或者i(insert/插入)鍵。
  • 插入模式(Insert mode):在插入模式中,能夠按ESC鍵回到普通模式。
  • 可視模式(Visual mode):命令多與字母v有關
  • 選擇模式(Select mode)
  • 命令行模式(Command line mode):在命令行模式中,執行命令(:鍵),搜索(/和?鍵)或者過濾命令(!鍵)。在命令執行以後,Vim返回到命令行模式以前的模式,一般是普通模式。
  • Ex模式(Ex mode):這和命令行模式比較類似,在使用:visual命令離開Ex模式前,能夠一次執行多條命令。

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

2.三種經常使用模式的切換

1)vim啓動進入普通模式;

2)處於插入模式或命令行模式時只須要按Esc或者Ctrl+[便可進入普通模式;

3)普通模式中按i(插入)或a(附加)鍵均可以進入插入模式;

4)普通模式中按:進入命令行模式;

5)命令行模式中輸入wq回車後保存並退出vim。

三、進入vim

1)在終端中輸入 vim 文件名;

2)在終端中輸入vim,進入vim界面中,進入命令行模式輸入:e  文件路徑(文件名)。

 

四、遊標移動

在普通模式下,有如下規則:

按鍵

說明

h

l

右(小寫L)

j

k

w

移動到下一個單詞

b

移動到上一個單詞

五、進入插入模式

在普通模式下使用下面的鍵將進入插入模式,並能夠從相應的位置開始輸入

命令

說明

i

在當前光標處進行編輯

I

在行首插入

A

在行末插入

a

在光標後插入編輯

o

在當前行後插入一個新行

O

在當前行前插入一個新行

cw

替換從光標所在位置後到一個單詞結尾的字符

六、命令行模式下保存文檔

從普通模式輸入:進入命令行模式,輸入w回車,保存文檔。輸入:w 文件名能夠將文檔另存爲其餘文件名或存到其它路徑下

七、退出vim

1)命令行模式下退出vim

從普通模式輸入:進入命令行模式,輸入wq回車,保存並退出編輯

如下爲其它幾種退出方式:

命令

說明

:q!

強制退出,不保存

:q

退出

:wq!

強制保存並退出

:w <文件路徑>

另存爲

:saveas 文件路徑

另存爲

:x

保存並退出

:wq

保存並退出

2)普通模式下退出vim

普通模式下輸入Shift+zz便可保存退出vim

八、刪除文本

1)普通模式下刪除vim文本信息

進入普通模式,使用下列命令能夠進行文本快速刪除:

命令

說明

x

刪除遊標所在的字符

X

刪除遊標所在前一個字符

Delete

同x

dd

刪除整行

dw

刪除一個單詞(不適用中文)

d$或D

刪除至行尾

d^

刪除至行首

dG

刪除到文檔結尾處

d1G

刪至文檔首部

ndd

刪除n行

九、字符的替換及撤銷(Undo操做)

1)替換和撤銷(Undo)命令

替換和Undo命令都是針對普通模式下的操做

命令

說明

r+<待替換字母>

將遊標所在字母替換爲指定字母

R

連續替換,直到按下Esc

cc

替換整行,即刪除遊標所在行,並進入插入模式

cw

替換一個單詞,即刪除一個單詞,並進入插入模式

C(大寫)

替換遊標之後至行末

~

反轉游標所在字母大小寫

u{n}

撤銷一次或n次操做

U(大寫)

撤銷當前行的全部修改

Ctrl+r

redo,即撤銷undo的操做

十、快速縮進

1)使用命令進行快速調整縮進操做

縮進操做均在普通模式下有效

  • 普通模式下輸入15G,跳轉到15行
  • 普通模式下輸入>> 整行將向右縮進(使用,用於格式化代碼超爽)
  • 普通模式下輸入<< 整行向左回退
  • 普通模式下輸入:進入命令行模式下對shiftwidth值進行設置能夠控制縮進和回退的字符數

2)shiftwidth命令

shiftwidth命令是指>>命令產生的縮進(能夠簡寫成sw) 普通模式下輸入:進入命令行模式

對shiftwidth值進行設置能夠控制縮進和回退的字符數。 獲取目前的設定值:set shiftwidth? ;設置縮進爲10個字符:set shiftwidth=10

十一、調整文本位置

命令行模式下輸入:ce(center)命令使本行內容居中   :ce

命令行模式下輸入:ri(right)命令使本行文本靠右    :ri

命令行模式下輸入:le(left)命令使本行內容靠左    :le

十二、查找

1)快速查找

普通模式下輸入/向下查找,輸入?向上查找,n表示繼續查找,N反向查找

2)高級查找

  • 普通模式下輸入\*尋找遊標所在處的單詞
  • 普通模式下輸入\#同上,但 \* 是向前(上)找,#則是向後(下)找
  • 普通模式下輸入g\*同\* ,但部分符合該單詞便可
  • 普通模式下輸入g\#同\# ,但部分符合該單詞便可

1三、多文件編輯

1)使用vim編輯多個文件

編輯多個文件有兩種形式:一種是在進入vim前使用的參數就是多個文件;另外一種就是進入vim後再編輯其餘的文件。 同時建立兩個新文件並編輯   $ vim 1.txt 2.txt

默認進入1.txt文件的編輯界面

$ vim -r 1.txt

  • 命令行模式下輸入:n編輯2.txt文件,能夠加!即:n!強制切換,以前一個文件的輸入沒有保存,僅僅切換到另外一個文件
  • 命令行模式下輸入:N編輯1.txt文件,能夠加!即:N!強制切換,以前文件內的輸入沒有保存,僅僅是切換到另外一個文件

2)進入vim後打開新文件

  • 命令行模式下輸入:e 3.txt 打開新文件3.txt
  • 命令行模式下輸入:e# 回到前一個文件
  • 命令行模式下輸入:ls能夠列出之前編輯過的文檔
  • 命令行模式下輸入:b 2.txt(或者編號)能夠直接進入文件2.txt編輯
  • 命令行模式下輸入:bd 2.txt(或者編號)能夠刪除之前編輯過的列表中的文件項目
  • 命令行模式下輸入:e! 4.txt,新打開文件4.txt,放棄正在編輯的文件
  • 命令行模式下輸入:f 顯示正在編輯的文件名
  • 命令行模式下輸入:f new.txt,改變正在編輯的文件名字爲new.txt

3)恢復文件

若是由於斷電等緣由形成文檔沒有保存,能夠採用恢復方式,vim -r進入文檔後,輸入:ewcover 1.txt來恢復

1四、可視模式

  • 在普通模式下輸入v(小寫),進入字符選擇模式,就能夠移動光標,光標走過的地方就會選取。再次按下v會後就會取消選取。
  • 在普通模式下輸入Shift+v(小寫),進入行選擇模式,按下V以後就會把整行選取,您能夠上下移動光標選更多的行,一樣,再按一次Shift+v就能夠取消選取。
  • 在普通模式下輸入 Ctrl+v(小寫),這是區域選擇模式,能夠進行矩形區域選擇,再按一次Ctrl+v取消選取。
  • 在普通模式下輸入d刪除選取區域內容
  • 在普通模式下輸入y複製選取區域內容
  • 在普通模式下輸入 Ctrl+v(小寫v),進入可視模式進行矩形區域選擇,選中第一列字符而後x刪除整列

1五、視窗操做

打開多個窗口進行編輯:在命令行模式下輸入:new

下述列舉的多種方法也能夠在命令模式或普通模式下打開新的視窗:

  • 命令行模式下輸入:sp 1.txt 打開新的橫向視窗來編輯1.txt
  • 命令行模式下輸入:vsp 2.txt 打開新的縱向視窗來編輯1.txt
  • 普通模式下Ctrl-w s 將當前窗口分割成兩個水平的窗口
  • 普通模式下Ctrl-w v 將當前窗口分割成兩個垂直的窗口
  • 普通模式下Ctrl-w q 即 :q 結束分割出來的視窗。若是在新視窗中有輸入須要使用強制符!即:q!
  • 普通模式下Ctrl-w o 打開一個視窗而且隱藏以前的全部視窗
  • 普通模式下Ctrl-w j 移至下面視窗
  • 普通模式下Ctrl-w k 移至上面視窗
  • 普通模式下Ctrl-w h 移至左邊視窗
  • 普通模式下Ctrl-w l 移至右邊視窗
  • 普通模式下Ctrl-w J 將當前視窗移至下面
  • 普通模式下Ctrl-w K 將當前視窗移至上面
  • 普通模式下Ctrl-w H 將當前視窗移至左邊
  • 普通模式下Ctrl-w L 將當前視窗移至右邊
  • 普通模式下Ctrl-w - 減少視窗的高度
  • 普通模式下Ctrl-w + 增長視窗的高度

1六、建立加密文檔: $ vim -x file1

1七、在vim執行外部命令

在命令行模式中輸入!能夠執行外部的shell命令

  • :!ls 用於顯示當前目錄的內容
  • :!rm FILENAME用於刪除名爲 FILENAME 的文件
  • :w FILENAME可將當前 VIM 中正在編輯的文件另存爲 FILENAME 文件
  • 普通模式下按F1打開vim本身預設的幫助文檔
  • 命令行模式下輸入:h shiftwidth 打開名爲shiftwidth的幫助文件
  • 命令行模式下輸入:ver 顯示版本及參數

1八、vim中的查看幫助

  • 普通模式下按F1打開vim本身預設的幫助文檔
  • 命令行模式下輸入:h shiftwidth 打開名爲shiftwidth的幫助文件
  • 命令行模式下輸入:ver 顯示版本及參數

1九、功能設定

1)vim的功能設定

要永久保存配置須要修改vim配置文件。 vim的配置文件~/.vimrc,能夠打開文件進行修改.

2.獲取目前的設定

  • 命令行模式下輸入:set或者:se顯示全部修改過的配置
  • 命令行模式下輸入:set all 顯示全部的設定值
  • 命令行模式下輸入:set option? 顯示option的設定值
  • 命令行模式下輸入:set nooption 取消當期設定值
  • 命令行模式下輸入:set autoindent(ai) 設置自動縮進
  • 命令行模式下輸入:set autowrite(aw) 設置自動存檔,默認未打開
  • 命令行模式下輸入:set background=dark或light,設置背景風格
  • 命令行模式下輸入:set backup(bk) 設置自動備份,默認未打開
  • 命令行模式下輸入: set cindent(cin) 設置C語言風格縮進

3.set功能的說明

  • 命令行模式下輸入:set autoindent(ai) 設置自動縮進
  • 命令行模式下輸入:set autowrite(aw) 設置自動存檔,默認未打開
  • 命令行模式下輸入:set background=dark或light,設置背景風格
  • 命令行模式下輸入:set backup(bk) 設置自動備份,默認未打開
  • 命令行模式下輸入: set cindent(cin) 設置C語言風格縮進

linux下c編程基礎部分

一、C語言的特色

1)中級語言 2)結構化 3)功能齊全 4)可移植性強

二、linux下C語言的編程環境

1)vim編輯器:編寫代碼

2)gcc編譯連接器:編譯程序

  • 預處理:gcc –E hello.c –o hello.i    ;gcc –E調用cpp     產生預處理過的C原始程序
  • 編 譯: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        產生可執行文件
  • 運行: ./hello 

注意:gcc的通常格式爲:gcc [選項] 要編譯的文件 [選項] [目標文件],其中,目標文件可默認,gcc默認生成可執行的文件,名爲編譯文件.out.

(1)gcc編譯經常使用選項:-E(只預編譯)、-S(只編譯不彙編)、-o(將file文件指定爲輸出文件)、-c(只編譯不連接)、

          -I dir(在頭文件的搜索路徑列表中添加dir目錄)、-g(在可執行程序中包含標準調試信息)

庫選項:-static(進行靜態編譯,即連接靜態庫、禁止使用動態庫)、-shared(生成動態庫文件、進行動態編譯,在沒有動態庫時纔會連接同名靜態庫)

    -L dir (在庫文件的搜索路徑列表中添加dir目錄)、-lname、-fPIC(生成使用相對地址的位置無關的目標代碼,而後使用gcc的-static選項從該PIC目標文件生成動態庫文件)

(2)靜態庫是一系列的目標文件(.o文件)的歸檔文件((lib+name).a文件);連接階段,選擇靜態庫,後綴名爲「.a」,選擇動態庫,後綴名爲「.so」

(3)靜態連接庫的生成: gcc -c 文件名.c     ar rcsv libxxx.a xxx.o

靜態庫的使用: gcc -o 文件名 文件名.c -L. -lxxx  //連接到靜態庫

注意:-L :在庫文件的搜索路徑列表中添加dir目錄

     -l : 在頭文件的搜索路徑列表中添加dir目錄

(3)共享庫的生成 gcc -fPIC -c xxx.c

                    gcc -shared -o libxxx.so xxx.o

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

(4)註冊共享庫的方法

a、修改/etc/ld.so.conf文件

b、修改LD_LIBRARY_PATH環境變量

c、將庫文件直接複製到/lib或者/usr/lib目錄下: cp (lib+name).so /lib

(5)gcc警告和出錯選項列表

-w(關閉全部告警)、-Wall(容許發出gcc提供的全部有用的報警信息)、-werror(把全部的告警信息轉化爲錯誤信息,並在告警發生時終止編譯過程)

3)gdb調試器:調試代碼

(1)使用流程

  • 查看文件:l
  • 設置斷點:在b後加入相對應的行號。例b 6
  • 查看斷點狀況:設置完斷點後鍵入info b,在gdb中能夠設置多個斷點。bt 查詢調用函數的狀況。
  • 運行代碼:默認從首行開始運行代碼,鍵入r;r+行號:從該行號開始運行
  • 查看變量值:p 變量。例:p n
  • 單步運行:n或s,s會進入函數,n不會進入函數
  • 恢復程序運行:c」

注意:程序的運行狀態有「運行」、「暫停」、「中止「三種。

(2)基本命令:help

主要命令:

工做環境相關命令

設置斷點與恢復命令

源碼查看相關命令

查看運行數據相關命令

修改運行參數相關命令

(3)斷點的設置

函數:b 文件名.c:函數名

行:b 行數

條件:b 行數 if 表達式(b 8 if == 10)

臨時:tb [文件名:]行號或函數名 <條件表達式>

4)make項目管理器:識別文件代碼是否更新,減小編譯工做量

原理:make工程管理器又名「自動編譯管理器」,它能夠根據文件時間戳自動發現更新過的文件而減小編譯工做量,可以讀入makefile文件的內容來執行編譯工做。編譯分爲編譯、彙編、連接階段,其中編譯階段僅檢查語法錯誤以及函數與變量是否被正確聲明;連接階段主要完成函數連接和全局變量的連接。

(1)makefile文件的編寫規則

格式爲:

目標體:依賴文件

[tab鍵]各目標體運行命令

目標體:由make建立,一般是目標文件或可執行文件

依賴文件:建立目標體所依賴的文件

運行命令:建立每一個目標體時須要的運行命令,必須以tab鍵開頭。

使用make的格式:make 目標體

(2)makefile變量的定義

遞歸展開方式:在引用該變量時進行替換(不能用於引用本身的狀況),缺點:不能在變量後追加內容。

格式定義:VAR = var

展開方式:在定義處展開,並只展開一次。優勢:消除變量的嵌套引用。

格式定義:VAR := var

make中變量的使用格式: $(變量名)

變量名的命名:不包括「:」、「#」、「=」以及結尾空格的任何字符串;變量名大小寫不敏感。

變量分類:用戶自定義變量、預約義變量、自動變量及環境變量。

(3)makefile規則

隱含規則

模式規則

2. 教材代碼編譯運行

gdb的練習

3. 課後做業

(1)練習代碼

gcc編譯過程圖(靜態庫的建立)

gcc編譯過程圖(動態庫的建立)

gcc編譯過程圖(運行結果)

make實現上述代碼的靜態庫使用自動化

make實現上述代碼的動態庫使用自動化

makefile文件爲:

(2)gdb調試過程練習例子

 

(3)make實現使用自動化的例子

 

 

 

參考資料:(參考論文、圖書、網站、同窗的內容必定要進行標註,不然以做弊論處,本次做業判0,三次以上的以課程考試做做弊論,並在立此存照(http://www.cnblogs.com/rocedu/p/4795939.html)中曝光)


7、遇到的問題及解決

(提示:此處由學生填寫,是重要的得分點,要寫出遇到的問題和解決方案以及對出現問題的思考)

vim學習部分

 一、行內跳轉:普通模式下使用下列命令在行內按照單詞爲單位進行跳轉,如下操做不能實現功能:

f<字母> 向後搜索<字母>並跳轉到第一個匹配的位置(很是實用)
F<字母> 向前搜索<字母>並跳轉到第一個匹配的位置
t<字母> 向後搜索<字母>並跳轉到第一個匹配位置以前的一個字母(不經常使用)
T<字母> 向前搜索<字母>並跳轉到第一個匹配位置以後的一個字母(不經常使用)

 

 二、問題如圖,沒法實現該操做的練習:

 

 

三、問題如圖,沒法實現該操做的練習:

 

 四、編譯做業中要求編譯的代碼,出現錯誤,找不到頭文件,如圖所示:

 錯誤緣由:由於對圖片的理解錯誤,直接將圖片內容寫入了同一個文件中。

 五、gdb設置斷點,沒有效果,問題如圖。

六、不會畫依賴圖

 

8、其餘

(提示:此處由學生填寫,靈感,領悟等)

相關文章
相關標籤/搜索