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