# 2018-2019-1 20165225《信息安全系統設計基礎》第一周學習總結
阿新 • • 發佈:2018-09-24
存儲 面向對象語言 alt locks vi編輯 開始 blog 動態鏈接 代碼調試
2018-2019-1 20165225《信息安全系統設計基礎》第一周學習總結
教材學習內容總結
vim的用法
- 命令行輸入vimtutor即可隨時查看:
linux系統下文件的轉換:
- gcc hello.c => 編譯hello.c源程序,出現a.out文件
- gcc -o hello hello.c => 編譯hello.c源程序,出現hello文件
- od -tc -tx1 hello.c => 按單字節查看文件內容
- gcc -E hello.c -o hello.i => 預處理階段
- gcc -S hello.c -o hello.s => 編譯階段
- gcc -C hello.c -o hello.o => 匯編階段
- od -c hello.o => 查看匯編碼
- objdump -d hello.o => 得到匯編碼
- gcc hello.o -o hello => 使hello文件可執行
調試
- gcc -g hello.c => 調試
- gdb a.out
- b main => 在main中設斷點b
- info b => 查看斷點b情況
- run => 運行
斷點
- b fxx => 函數斷點
- b +行號 => 行斷點
- tb => 臨時斷點
- b if => 條件斷點
- 常用cgbd
- cgbd a.out
- s => step
- n => next
- qit
- p => print
- p i ... => 改值
- f => finish
測試1-vi
- 每個.c一個文件,每個.h一個文件,文件名中最好有自己的學號
- 用Vi輸入圖中代碼,並用gcc編譯通過
- 在Vi中使用K查找printf的幫助文檔
- 提交vi編輯過程截圖,要全屏,包含自己的學號信息
測試2-gcc測試
- 用gcc 進行預處理,編譯,匯編,鏈接vi輸入的代碼
- 生成的可執行文件中要有自己的學號
- 提交預處理,編譯,匯編,鏈接,運行過程截圖,要全屏,包含自己的學號信息
- 預處理:gcc -E -I include src/.c -o bin/.i
測試3-gdb測試
- 用gcc -g編譯vi輸入的代碼
- 在main函數中設置一個行斷點
- 在main函數增加一個空循環,循環次數為自己學號後4位,設置一個約為學號一半的條件斷點
- 提交調試過程截圖(一定包含條件斷點的),要全屏,包含自己的學號信息
- 首先要gcc -g來生成一個可執行文件,打開gdb調試,然後設置行斷點 b 9(第九行)
測試4-靜態庫的測試
- 除了main.c外,其他4個模塊(add.c sub.c mul.c div.c)的源代碼不想給別人,如何制作一個mymath.a靜態庫?main.c如何使用mymath.a?
- 提交靜態庫生成和調用過程截圖(一定包含條件斷點的),要全屏,包含自己的學號信息
- 加上-g將.c文件編譯成.o文件,輸入圖上指令生成一個mymath.a的靜態庫文件,然後用mymath.a文件生成一個可執行文件test
測試5-共享庫
- 除了main.c外,其他4個模塊(add.c sub.c mul.c div.c)的源代碼不想給別人,如何制作一個mymath.so共享庫?main.c如何使用mymath.so?
- 提交共享庫生成和調用過程截圖(一定包含條件斷點的),要全屏,包含自己的學號信息
- 輸入圖上代碼生成一個共享庫文件,並用共享庫文件生成一個可執行文件:
課本學習
第一章
- 計算機系統由硬件和系統軟件組成,兩者共同運作以運行應用程序。內部信息被表示為一組組的位,位依據上下文有不同的解釋方式。
- 程序被其他翻譯程序翻譯成不同形式,開始是被翻譯成ASCII文本,然後被翻譯成計算機可執行的二進制文本。如果是用Code::Blocks等編譯軟件編譯,則在編譯完成後自動生成可執行文本;若是用vim,則必須手動完成翻譯工作。
- 處理器通過讀取並解釋二進制指令來運行程序。
第七章
- 鏈接可以在編譯時依靠靜態編譯器完成,也可以在加載時靠動態鏈接器完成。鏈接器的目標文件只有二進制文件一種。
- 鏈接器主要任務有二:符號解析和重新定義。
- GCC編譯器在工作過程中調用得到的鏈接器為靜態鏈接器,其他編譯驅動程序亦是如此。
- 與編譯位置無關的代碼的共享庫可以加載到任何地方,亦可以在運行中被多個進程共享。
每一章的問題:
第一章 計算機系統的核心概念是什麽?
第二章 計算機有32位與64位之分,分別何在?兩種計算機所存數據相互交換,會出現什麽情況?
第三章 條件控制來實現條件分支和條件傳送來實現條件分支有何實質性區別?
第四章 到底什麽系統會用到Y86-64代碼?
第五章 怎麽樣的代碼是不必要的引用內存?
第六章 基本存儲技術都包括哪些?
第七章 靜態鏈接和動態鏈接有何區別?
第八章 異常控制流在計算機的各個層次都有怎樣的作用?
第九章 虛擬存儲器的作用?
第十章 1Unix I/O是什麽
第十一章 協議軟件需要的基本能力有哪些?
第十二章 三種不同的並發編程技術的區別:
問題1:C語言是一種面向過程語言,C++和Java是面向對象語言,而Unix是由C語言實現的,那麽,面向對象語言的程序是怎麽在面向過程語言的系統中運行的?
問題1解決方案:一點思考,將所有程序的文本全部翻譯成機器語言,那麽計算機就可以直接執行命令了。面向對象和面向過程只是相較於我們來分的,對於計算機其實並沒有差別,因為不管什麽樣的高級編程語言到最後都會翻譯成一連串的二進制碼。
代碼調試中的問題和解決過程
代碼調試只在首次使用GCC、GDB編譯過程中出現,屬於熟練度不夠問題,重復練習即可解決。
代碼托管
其他
- 本周我們開始了信息安全系統設計基礎課程的學習。第一節課的課程主要是復習了上學期學習java所用到的Ubuntu的一些快捷命令,老師還教授了c語言如何在命令行中進行編譯及其他相關問題,總的來說還需要多投入時間學習消化。
學習進度條
代碼行數(新增/累積) | 博客量(新增/累積) | 學習時間(新增/累積) | 重要成長 | |
---|---|---|---|---|
目標 | 3500行 | 12 | 14小時 | |
第一周 | 63/150 | 1/12 | 3小時 |
參考資料
- 《信息安全系統設計基礎》教學進程
# 2018-2019-1 20165225《信息安全系統設計基礎》第一周學習總結