20145212 《信息安全系統設計基礎》第2周學習總結

20145212 《信息安全系統設計基礎》第2周學習總結

教材學習內容總結

Vim基本操作

  • 1.使用vim命令進入vim界面

vim后面加上你要打開的已存在的文件名或者不存在(則作為新建文件)的文件名。 打開Xfce終端,輸入以下命令
$ vim practice_1.txt
直接使用vim也可以打開vim編輯器,但是不會打開任何文件。
$ vim
進入命令行模式后輸入:e 文件路徑 同樣可以打開相應文件。

  • 2.游標移動
    按Esc進入普通模式,在該模式下使用方向鍵或者h,j,k,l鍵可以移動游標
按鍵說明
h
l
j
k
w移動到下一個單詞
b移動到上一個單詞

877181-20160920111457246-1704498076.png

  • 3.進入插入模式
    在普通模式下使用下面的鍵將進入插入模式,并可以從相應的位置開始輸入
命令說明
i在當前光標處進行編輯
I在行首插入
A在行末插入
a在光標后插入編輯
o在當前行后插入一個新行
O在當前行前插入一個新行
cw替換從光標所在位置后到一個單詞結尾的字符

877181-20160920111631793-669606358.png

注意每次要先回到普通模式才能切換成以不同的方式進入插入模式

  • 4.保存文檔

命令行模式下保存文檔

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

  • 5.退出vim

1.命令行模式下退出vim
從普通模式輸入:進入命令行模式,輸入wq回車,保存并退出編輯

2.以下為其它幾種退出方式:

命令說明
:q!強制退出,不保存
:q退出
:wq!強制保存并退出
:w 另存為
:saveas 文件路徑另存為
:x保存并退出
:wq保存并退出

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

  • 6、刪除文本

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

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

命令說明
x刪除游標所在的字符
X刪除游標所在前一個字符
Delete同x
dd刪除整行
dw刪除一個單詞(不適用中文)
d$或D刪除至行尾
d^刪除至行首
dG刪除到文檔結尾處
d1G刪至文檔首部

除此之外,還可以在命令之前加上數字,表示一次刪除多行,如:
2dd表示一次刪除2行

GCC基本操作

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

877181-20160920220354449-153982767.png
877181-20160920220403699-1033987384.png
877181-20160920220412043-1169635849.png
Tips:

1.Linux的可執行文件并沒有像 Windows 那樣有明顯的.exe后綴名, 只需向其分配x(可執行)權限即可 sudo chmod u+x excutefile

2.作為Linux程序員,我們可以讓gcc在編譯的任何階段結束,以便檢查或使用該階段的輸出(這個很重要)

GDB基本操作

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

0.gdb programm(啟動GDB)
1.l 列出源碼,相當于list
2.b 設斷點(要會設4種斷點:行斷點、函數斷點、條件斷點、臨時斷點)
3.run 開始運行程序
4.bt 打印函數調用堆棧
5.p 查看變量值
6.c 從當前斷點繼續運行到下一個斷點
7.n 單步運行
8.s 單步運行
9.quit 退出GDB

  • 注:啟動gdb的方法有以下幾種:
    gdb <program> program也就是執行文件,一般在當前目錄下。
    gdb <program> core 用gdb同時調試一個運行程序和core文件,core是程序非法執行后,core dump后產生的文件。
    gdb <program> <PID> 如果程序是一個服務程序,那么可以指定這個服務程序運行時的進程ID。gdb會自動attach上去,并調試它。program應該在PATH環境變量中搜索得到。 gdb啟動時,可以加上一些gdb的啟動開關,詳細的開關可以用gdb -help查看。下面只列舉一些比較常用的參數: -symbols <file> -s <file> 從指定文件中讀取符號表。 -se file 從指定文件中讀取符號表信息,并把它用在可執行文件中。-core <file> -c <file> 調試時core dump的core文件。-directory <directory> -d <directory> 加入一個源文件的搜索路徑。默認搜索路徑是環境變量中PATH所定義的路徑。

截圖:
877181-20160925160632179-367012442.png
877181-20160925161709240-726982989.png
877181-20160925161819182-1456877982.png

Makefile的使用

使用參考了實驗樓的教程,就不在此復制粘貼了……

教材學習中的問題和解決過程

  • 問題一:GDB的n(next)命令讓GDB執行下一行,然后暫停。 s(step)命令的作用與此類似,只是在函數調用時step命令會進入函數,那么實際使用中應該優先選用哪個?為什么?
    GDB的next命令讓GDB執行下一行,然后暫停。step命令的作用于此類似,只是在函數調用時step命令會進入函數,而next導致程序執行的暫停出現在下次調用函數時。DDD有對應的Next和Step菜單項。

答:
next:執行一行源代碼但不進入函數內部。
step :執行一行源代碼而且進入函數內部。
我認為應該優選step,通過GDB的next命令一次是移動一行代碼,而通過step命令單步調試一段時間,更能夠仔細檢查靠近斷點處的程序狀態和行為。

代碼調試中的問題和解決過程

  • 1.在進行實驗樓實驗的學習中,代碼編譯出現一個錯誤:
    877181-20160924111216606-1236337032.png
  • 2.經過對div.c的檢查,刪除了一個不小心打上的~號之后,成功
    877181-20160924111226496-645913245.png
  • 3.但是運行的結果中div一直是0,經過思考,應該是由于div.c中的a和b都是int型的,要想進行double運算需要一個類型轉換所導致。
    877181-20160924111235715-1867549576.png
  • 4.但是,不論是強制類型轉換還是在div.c中變成return (a+0.0)/b,得到的結果依舊都是0.0000……
  • 5.我嘗試在Windows的VC++中編譯了相同的程序,得到的結果卻是正確的!!!
    877181-20160924113145887-1241953597.png
    877181-20160924113152027-170594034.png
  • 6.陷入沉思……并不知道為什么?難道是因為不同系統的規定不一樣……?
  • 7.把上述代碼中除了main函數外的代碼制作成一個靜態庫math.a和一個共享庫math.so
    877181-20160924121541793-563057740.png
  • 8.編寫makefile,讓代碼編譯,上述靜態庫和共享庫的使用自動化。
    877181-20160924121551668-1081469897.png

課程學習中的問題和解決過程

  • 一、在vim下載過程中出現以下問題

E: 無法獲得鎖 /var/cache/apt/archives/lock – open (11 資源臨時不可用)
E: 無法鎖定下載目錄

解決方法:
方法一 命令:ps -aux 列出進程 找到最后一列以apt-get 開頭的進程 命令:sudo kill 該進程的PID
方法二: sudo rm /var/cache/apt/archives/lock sudo rm /var/lib/dpkg/lock

  • 二、在Ubuntu下使用git上傳代碼:

1.首先,我按照在百度上找到的教程生成公鑰:
877181-20160924095810996-1792492929.png
877181-20160924100003309-703529246.png

2.然而,在添加過公鑰進行鏈接測試的時候出現了問題:
877181-20160924100101043-343268280.png
無法連接……這個問題各種查資料……重新生成公鑰等等擺弄了半天都沒有成功,然而最后驚覺我使用的是開源中國而不是github……咳……

3.接下來進行正確的git連接,還是出現了問題:
877181-20160924100425309-761557426.png
經過百度,在一個全英文的網頁上看到了奇怪的解決方法:
877181-20160924100633465-1289475584.png

4.最終連接成功:
877181-20160924095915887-879683529.png

5.推送(一部分代碼):
877181-20160924114628106-1220607168.png

家庭作業中的問題和解決過程

  • 7.7 不改變任何變量名字,修改7.6.1中的bar5.c,使得fool5.c輸出x和y的正確值
    答:輸出錯誤的原因是全局符號x被多重定義,若想輸出正確的值,可以將bar5.c中的x變成局部變量,將其移到void f()的括號中就可以了。

  • 7.8
    答:
    A.main.1,main.2;
    B.UNKNOWN;
    C.ERROR.

  • 7.9 的程序當在Linux系統中編譯和執行時,即使p2不初始化變量main,它也能打印字符串“0x55\n”并正常終止。你能解釋這一點嗎?
    答:p2中的main是弱符號,鏈接器會把bar6.c中的main引用為foo6.c中的main,打印出來的應該是main函數指令第一個字節的地址。

  • 7.10 給出使得靜態鏈接器能夠解析所有符號引用的最小的命令行:
    答:
    A.gcc p.o libx.a p.o
    B.gcc p.o libx.a liby.a libx.a
    C.gcc p.o liby.a libx.a liby.a libz.a

本周代碼托管截圖

877181-20160925170522022-515779163.png
877181-20160925170607744-1426318590.png
877181-20160925170413939-1340810196.png
877181-20160925170425361-1248391061.png
877181-20160925170432362-262576827.png

其他

感覺這周要學習的內容好多啊,不過更多的是學習一些在Ubuntu下的Vim基本操作以及一些很基礎的原理。
這周即使按照課本以及實驗樓的實驗過了一遍還是覺得在實際用起來的時候很生疏,希望以后的學習中可以不斷鞏固。

學習進度條

代碼行數(新增/累積)博客量(新增/累積)學習時間(新增/累積)重要成長
第一周0/02/210/10
第二周300/3003/320/30

參考資料

  • Makefile使用 - 實驗樓
  • 《深入理解計算機系統V2》學習指導
  • GDB調試
  • 簡明Vim練級攻略
  • Linux makefile 教程 非常詳細,且易懂
  • Linux系統編程 實驗樓

轉載于:https://www.cnblogs.com/alovera/p/5888080.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/256321.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/256321.shtml
英文地址,請注明出處:http://en.pswp.cn/news/256321.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Opencv—— 擬合直線

概念 最小二乘法是勒讓德( A. M. Legendre)于1805年在其著作《計算慧星軌道的新方法》中提出的。 最小二乘法就是通過最小化誤差的平方和&#xff0c;使得擬合對象無限接近目標對象。在圖像處理中主要用于擬合線&#xff0c;通過求采樣點距離誤差最小的線&#xff0c;可以是直…

本地搭建Dubbo監控中心的安裝步驟

Dubbo監控中心的安裝步驟 參考鏈接&#xff1a;http://blog.csdn.net/lichunan/article/details/40349645 一、從github上下載dubbo源碼進行編譯&#xff1a; 1、下載地址為&#xff1a; https://github.com/alibaba/dubbo.git2、編譯源碼命令&#xff1a;首先進入~/dubbo&am…

(轉)SQLServer實例講解

歡迎和大家交流技術相關問題&#xff1a; 郵箱: jiangxinnju163.com 博客園地址: http://www.cnblogs.com/jiangxinnju GitHub地址: https://github.com/jiangxincode 知乎地址: https://www.zhihu.com/people/jiangxinnju 實例就是一個在數據庫中存在的&#xff0c;現實的數據…

Basler相機SDK相關問題收集與知識匯總

1.心跳時間導致報錯 此心跳非彼心跳,相機心跳是指過通過設置一個時間用于監測相機和網卡的連接,如果超過這個時間,相機就會釋放跟網卡的連接,進入一種允許相機被再次連接的狀態。 但此方式會導致相機SDK報錯,經常顯示在使用中,無可用連接,如何解決? 1.干等。不可取 2.…

14-會場安排問題

會場安排問題 時間限制&#xff1a;3000 ms | 內存限制&#xff1a;65535 KB難度&#xff1a;4描述學校的小禮堂每天都會有許多活動&#xff0c;有時間這些活動的計劃時間會發生沖突&#xff0c;需要選擇出一些活動進行舉辦。小劉的工作就是安排學校小禮堂的活動&#xff0c;…

【TensorFlow】——實現minist數據集分類的前向傳播(常規神經網絡非卷積神經網絡)

目錄 一、常規神經網絡模型 二、TensorFlow實現前向傳播步驟 1、讀取數據集 2、batch劃分 3、根據神經網絡每一層的神經元個數來初始化參數w,b 4、進行每一層輸入輸出的計算 5、對每一層的輸出進行非線性relu函數變換 6、計算一個batch訓練后的誤差loss 7、計算每一次…

大道至簡第二章

懶人造就了方法 開頭說的&#xff0c;有一個人叫李冰也要移山&#xff0c;可是他卻要用和愚公截然不同的方法&#xff0c;那就是用“燒”的方法來碎石&#xff0c;那么這樣的好處就是省力。那么他又是怎樣想到的辦法的呢&#xff0c;就是生活中仔細觀察他老婆做飯時水溢出是石頭…

C# 回調函數詳解

回調和回調函數是什么 軟件模塊之間存在著接口&#xff0c;而回調是一種雙向調用模式&#xff0c;被調用方在接口被調用時也會調用對方的接口。 對于一般的結構化語言&#xff0c;可以通過回調函數來實現回調。回調函數是一個函數或過程&#xff0c;是一個由調用方自己實現&am…

神經網絡(11)--具體實現:unrolling parameters

我們需要將parameters從矩陣unrolling到向量&#xff0c;這樣我們就可以使用adanced optimization routines. unroll into vectors costFunction與fminunc里面的theta都是n1維的向量&#xff0c;costFunction的返回值gradient也是n1維的向量。 但是當我們使用神經網絡時&#x…

[轉]ASP.Net篇之Session與Cookie

本文轉自&#xff1a;http://www.cnblogs.com/japanbbq/archive/2011/08/31/2160494.html Session: Session是“會話”的意思&#xff0c;然而&#xff0c;因為http協議是無狀態的&#xff0c;那么每次客戶端請求服務器端&#xff0c;服務器端都會以“嶄新”的頁面展示給客戶端…

C# 接口詳解

概念 接口描述的是可屬于任何類或結構的一組相關行為&#xff0c;所以實現接口的類或結構必須實現接口定義中指定的接口成員。 定義&#xff1a;使用interface 關鍵字&#xff0c;由方法、屬性、事件、索引器或這四種成員類型的任意組合構成。另可使用new、public、protected、…

js學習之地圖生成

首先&#xff0c;上地圖圖片 接著&#xff0c;js&#xff0c;我們可以把圖片看成一塊塊32*32像素的 var i; var j;window.onload function () {gamemap(15, 10, 10, "map.jpg"); }var mapimg new Image(); var map [[18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,…

linux性能分析常用的命令

1&#xff0c;uptime 查看系統負責2&#xff0c;more 分頁查看文件&#xff0c;enter顯示下一行&#xff0c;空格顯示下一頁&#xff0c;F顯示下一屏&#xff0c;B顯示上一屏內容。3&#xff0c;top命令查看系統情況&#xff0c;按shif H可以查看當前線程的負載。4&#xff0…

C#中Console.ReadKey()與ConsoleKey的一些用法

1.控制臺程序不讓窗口閃過 對于控制臺程序&#xff0c;Console.ReadKey()可以使窗口停留一下&#xff0c;直到點擊鍵盤任一鍵為止。 2.通過按鍵進行選擇 key Console.ReadKey(true).Key;if (key ConsoleKey.S){ Console.Write("Input the message:…

【TensorFlow】——Windows10、pycharm、Python3.6.4中安裝CPU和GPU兩種版本的TensorFlow

tensorflow分為兩種&#xff0c;一種是cpu版本&#xff0c;一種是gpu版本 CPU版本可以直接通過pip進行安裝&#xff1a; 這里是在國內鏡像源中進行的下載&#xff0c;下載的版本是2.2.0版本 pip --default-timeout1000 install tensorflow-cpu2.2.0 -i http://pypi.douban.c…

vsftpd.conf 詳解與實例配置

#################匿名權限控制############### anonymous_enableYES   #是否啟用匿名用戶 no_anon_passwordYES   #匿名用戶login時不詢問口令 下面這四個主要語句控制這文件和文件夾的上傳、下載、創建、刪除和重命名。 anon_upload_enable&#xff08;yes/no)…

下拉框選擇

1&#xff0c;簡單下拉框 <!DOCTYPE html> <html> <head lang"en"><meta charset"UTF-8" ><meta name"viewport" content"widthdevice-width, initial-scale1, user-scalableno, minimal-ui, maximum-scale1&qu…

基于C#的TCP/IP協議應用(一)

一、背景與概念 1.標準以太網 以太網是美國Xerox&#xff08;施樂&#xff09;公司的Palo Alto研究中心于1975年研制成功的&#xff0c;其核心技術起源于ALOHA網。目前以太網是指符合IEEE 802.3標準的局域網(LAN)產品組&#xff0c;其中IEEE 802.3是一組電氣與電子工程師協會…

WORD文檔的超鏈接無法打開——“由于本機的限制該操作已被取消”的解決方法

之前我電腦還很正常&#xff0c;最近裝了一個打印機后&#xff0c;放在word文檔的文字超鏈接就打不開了&#xff0c;提示說“由于本機的限制該操作已被取消”&#xff0c;請各位高手指導下該怎樣解決這個問題&#xff1f; WORD文檔的超鏈接無法打開的原因是文件在插入超鏈接之…